System.ServiceModel.ProtocolException: удаленный сервер возвратил неожиданный ответ: (413) слишком сложный объект запроса

1

Я работаю над проектом. Веб-сайт был создан на MVC, http://www.example.com, недавно другой разработчик добавил веб-службу Windows (а не WCF) к проекту, http://www.example.com/WebServices/upload.asmx. Он предназначен для загрузки изображений на сервер. Маршрут добавлен в RouteConfig, поэтому он работает:

routes.IgnoreRoute("WebServices/*/{resource}.aspx/{*pathInfo}");

Однако я заметил, что он работает для файлов небольшого размера. Когда размер файла достигает определенной точки, т.е.> 1 МБ (не уверен, что точный #, но файл с файлом 650 КБ работает и файл с ошибкой 1.1 МБ). Сообщение об ошибке:

System.ServiceModel.ProtocolException was caught
  HResult=-2146233087
  Message=The remote server returned an unexpected response: (413) Request Entity Too Large.
  Source=mscorlib
  StackTrace:
    Server stack trace: 
       at System.ServiceModel.Channels.HttpChannelUtilities.ValidateRequestReplyResponse(HttpWebRequest request, HttpWebResponse response, HttpChannelFactory'1 factory, WebException responseException, ChannelBinding channelBinding)
       at System.ServiceModel.Channels.HttpChannelFactory'1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
       at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
       at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout)
       at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation)
       at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
    Exception rethrown at [0]: 
       at System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
       at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
       at SyncDatabase.eyephoto.com.upload.UploadSoap.UploadImage(UploadImageRequest request)
       ....
  InnerException: System.Net.WebException
       HResult=-2146233079
       Message=The remote server returned an error: (413) Request Entity Too Large.
       Source=System
       StackTrace:
            at System.Net.HttpWebRequest.GetResponse()
            at System.ServiceModel.Channels.HttpChannelFactory'1.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout)
       InnerException: 

Я искал 2 дня, все решения, которые я мог найти, не сработали. Теперь, на сайте, в web.config, у меня есть:

<httpRuntime maxRequestLength="40960000" executionTimeout="300"  />
...

<system.serviceModel>
    <client />
    <bindings>
      <basicHttpBinding>
        <binding closeTimeout="00:10:00"
          openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" maxBufferPoolSize="2147483647" maxBufferSize="2147483647"
          maxReceivedMessageSize="2147483647"  >
          <readerQuotas maxDepth="2000000" maxStringContentLength="2147483647"
            maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />

        </binding>
      </basicHttpBinding>
    </bindings>
</system.serviceModel>

Мы используем настольное приложение для использования веб-службы. В app.config у меня есть:

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="UploadSoap1" maxBufferPoolSize="2147483647" maxBufferSize="2147483647"
          maxReceivedMessageSize="2147483647" closeTimeout="00:10:00"
          openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" >

          <readerQuotas maxDepth="2000000" maxStringContentLength="2147483647"
            maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />

          <security mode="None" />
        </binding>        
      </basicHttpBinding>
    </bindings>

    <client>
      <endpoint address="http://www.example.com/WebServices/Upload.asmx"
        binding="basicHttpBinding" bindingConfiguration="UploadSoap1"
        contract="mysite.com.upload.UploadSoap" name="UploadSoap1" />
    </client>
 </system.serviceModel>

Странно: файл 600 КБ работает, но если размер файла> 1 МБ, он имеет эту ошибку. НО, нигде из этой конфигурации я не могу найти никакого отношения к этим числам.

Кто-нибудь знает, в чем проблема? Какие-либо предложения? Может ли это из-за маршрута в MVC?

благодаря

Теги:
asp.net-mvc
web-services

1 ответ

0

после многих попыток, основанных на результатах поиска, по некоторым причинам это никогда не удавалось. Максимальный загружаемый файл всегда около 600 КБ, не знаю, откуда это взялось. Я подозреваю, что это потому, что я использую традиционную веб-службу asmx в проекте MVC.

В конце я решил сделать это:

  1. с конца клиента, разделите файл на "фрейм", который составляет 512 КБ.
  2. используйте веб-службу для передачи кадра на сервер.
  3. сервер решает, нужно ли сохранять файл в файловой системе (например, размер файла <512 КБ, тогда он имеет только 1 кадр), или сохранить в базу данных и ждать следующего кадра. каждый кадр сохраняется в sql с направляющим и фреймом # и суммарным #.
  4. если последний кадр получен, затем загрузите кадры из sql и объедините их, затем выполните другую обработку.

это не лучший способ сделать это, но, по крайней мере, это работает. и мы можем дополнительно выбрать размер кадра.

благодаря

  • 0
    привет, как вы определили кадр 512 КБ в c #
  • 0
    в нашей среде максимальный размер загружаемого файла составляет около 600 КБ. Я выбираю 512 КБ просто потому, что это 2 ^ 8 КБ, а не по каким-то особым причинам.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню