Как увеличить размер данных, отправляемых в ADO.Net Data Services? - PullRequest
0 голосов
/ 12 января 2009

У меня есть служба данных, которая принимает байтовый массив. Затем у меня есть веб-страница, которая пытается отправить файл в эту службу данных. Если файл небольшой (скажем, 50 КБ), то все работает как положено, однако, если файл большой (более 100 КБ), я получаю сообщение об ошибке «BadRequest» при вызове изменения сохранения для службы данных.

Существует ли способ передачи больших объемов данных в службу данных?

РЕДАКТИРОВАТЬ (более подробно): я установил maxRequestLength выше и попробовал несколько webHttpBinding, чтобы увеличить maxReceivedMessageSize, но, похоже, это не помогает.

Ответы [ 2 ]

5 голосов
/ 15 января 2009

Максимальный размер запроса, который может обрабатывать служба WCF, определяется свойством MaxReceivedMessageSize в привязке WCF. Значение по умолчанию - 65536, при превышении которого вы получите код ответа 400.

В файле web.config веб-сайта, на котором размещена служба, добавьте следующий узел в раздел.

<system.serviceModel> 
<services> 
  <!-- The name of the service --> 
  <service name="NorthwindService"> 
    <!-- you can leave the address blank or specify your end point URI --> 
    <endpoint address ="YourServiceEndpoint" 
              binding="webHttpBinding" bindingConfiguration="higherMessageSize" 
     contract ="System.Data.Services.IRequestHandler"> 
    </endpoint> 
  </service> 
</services> 
<bindings> 
  <webHttpBinding> 
    <!-- configure the maxReceivedMessageSize  value to suit the max size of 
         the request ( in bytes ) you want the service to recieve--> 
    <binding name="higherMessageSize" maxReceivedMessageSize ="MaxMessageSize"/> 
  </webHttpBinding> 
</bindings> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 
</system.serviceModel>

При размещении в IIS ограничение размера запроса ASP.Net также может привести к отклонению большого запроса. Вам необходимо установить свойство HttpRuntimeSection.MaxRequestLength.

<system.web> 
  <httpRuntime MaxRequestLength="ValueInKiloBytes" />
</system.web>

Определите, создает ли WCF исключение под прикрытием, которое не отображается вам на уровне HTTP. Вы можете настроить трассировку WCF на стороне сервера для регистрации необходимой информации из уровня WCF. После настройки трассировки и воспроизведения ошибки проверьте, содержит ли журнал одно или оба из этих сообщений об исключениях.

System.ServiceModel.ProtocolException
"The maximum message size quota for incoming messages (65536) has been exceeded. 
To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element."

System.Web.HttpException
"Maximum request length exceeded."

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

PD: Помните, что ваша форма должна использовать метод "POST".

3 голосов
/ 13 апреля 2011

Я также пытался редактировать файл web.config безрезультатно. Я все еще получаю то же исключение.

Решением, которое работает для меня, было редактирование файла machine.config и добавление следующих строк в узле System.ServiceModel.

<standardEndpoints>
        <webHttpEndpoint>
            <standardEndpoint name="" maxReceivedMessageSize="16777216" maxBufferSize="16777216" />
        </webHttpEndpoint>
    </standardEndpoints>

Я не знаю, правильное ли это решение, но оно работает для меня.

...