Подтвердить что ты не робот

MaxReceivedMessageSize не фиксирует 413: запросить сущность слишком большой

Мой вызов веб-службы WCF не работает с System.Net.WebException: The request failed with HTTP status 413: Request Entity Too Large.

Проверка Fiddler, я вижу, что я отправляю:

Content-Length: 149839

Что более 65 КБ.

Включение трассировки WCF на сервере, я вижу:

System.ServiceModel.ProtocolException: максимальная квота размера сообщения для входящих сообщений (65536). Чтобы увеличить квоты, используйте свойство MaxReceivedMessageSize для соответствующего связывающий элемент.

Добавление этого свойства не решает проблему.

Я пробовал только с этим свойством и (позже) с другими, которые предлагали сообщения. Вот что у меня в настоящее время (на сервере):

<basicHttpBinding>

  <binding name="PricerServiceSoap"
    closeTimeout="00:10:00" openTimeout="00:10:00"
    receiveTimeout="00:10:00" sendTimeout="00:10:00"
    maxBufferSize="2147483647"    
    maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">

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

</basicHttpBinding>

Моя единственная конечная точка (под <client>):

<endpoint address="/NetPricingService/Service.asmx"
  binding="basicHttpBinding" bindingConfiguration="PricerServiceSoap"
  contract="Pricing.PricerService.PricerServiceSoap"
  name="PricerServiceSoap" />

Я также добавил:

<dataContractSerializer maxItemsInObjectGraph="2147483647"/>

под <behavior>.

Я даже запускаю (для IIS 7):

%windir%\system32\inetsrv\appcmd set config "WebServicesDev/PricingService"
-section:requestFiltering -requestLimits.maxAllowedContentLength:104857600
-commitpath:apphost

Ничего не имеет значения.

Один из уловков заключается в том, что это служба WCF, предназначенная для замены более старой службы ASMX. Скелет службы был создан с помощью svcutil из существующего WSDL. Я не могу изменить конфигурацию клиента (и клиенты находятся на нескольких языках). Мой проект тестового клиента импортировал службу с помощью Add Web Reference (под Add Service Reference / Advanced), поэтому у меня нет конфигурации WCF. Однако тестовый клиент работает, если я укажу его на более старую службу ASMX.

Как я могу исправить или диагностировать это?

Дополнительная информация

Если я использую редактор конфигурации службы Microsoft для создания конфигурации (настройка maxReceivedMessageSize и maxBufferSize), она работает. Проблема в том, что конечная точка затем указывается в <service>, и это не позволит мне указать относительный адрес /NetPricingService/Service.asmx. Если я отредактирую привязки в конфигурации, сгенерированной svcutil (где конечная точка находится под <client>), она не работает с большими запросами.

4b9b3361

Ответ 1

Ответ смотрел мне в лицо.

Конфигурация, созданная svcutil, была для клиента. Я использовал его на сервере.

Я редактировал привязки для конечных точек, указанных в <client>, что не имело никакого значения для службы.

Добавление правильной конечной точки <service> и установка maxReceivedMessageSize и maxBufferSize при ее привязке разрешили проблему.

Ответ 2

У меня была аналогичная проблема. Для меня проблема заключалась в том, что моя конечная точка явно не указала привязку, используя bindingConfiguration, и поэтому, должно быть, где-то использовалась какая-то по умолчанию.

У меня было:

<webHttpBinding>
    <binding 
        name="myXmlHttpBinding" 
        maxReceivedMessageSize="10485760" 
        maxBufferSize="10485760">
        <readerQuotas 
            maxDepth="2147483647" 
            maxStringContentLength="2147483647" 
            maxArrayLength="2147483647" 
            maxBytesPerRead="2147483647" 
            maxNameTableCharCount="2147483647"/>
        <security mode="None"/>
    </binding>
</webHttpBinding>

и моя конечная точка определена как:

<service 
    name="blah.SomeService">
    <endpoint 
        address="" 
        behaviorConfiguration="WebHttpBehavior" 
        binding="webHttpBinding" 
        contract="blah.ISomeService">

        <identity>
            <dns value="localhost"/>
        </identity>
    </endpoint>
</service>

Он работал, когда я изменил конечную точку на:

  <service name="blah.SomeService">
    <endpoint address="" 
        behaviorConfiguration="WebHttpBehavior" 
        binding="webHttpBinding" 
        bindingConfiguration="myXmlHttpBinding" 
        contract="blah.ISomeService">
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>
  </service>

Ответ 3

У меня также была эта проблема, и я понял в fiddler, что максимальное значение Content-Length, которое работало, в итоге составило 30000000.

Убедившись, что моя конфигурация WCF была правильной, я обнаружил статью, в которой предлагается изменить настройку IIS, "Фильтрация запросов".

Ошибка загрузки большого файла для веб-приложения, вызывающего службу WCF - слишком большой запрос 413

  1. Откройте диспетчер IIS
  2. Выберите ваше приложение
  3. Выберите значок "Фильтрация запросов".
  4. Выберите Изменить параметры функции... (правая панель)
  5. Установите максимально допустимую длину содержимого (в байтах). По умолчанию отображается 30000000

.или пример файла web.config

<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="50000000" />
    </requestFiltering>
  </security>
</system.webServer>

Ответ 4

попробовал вещи из 10 разных блогов, и мой коллега понял это. нам пришлось добавить секцию basicHttpsBinding внутри раздела в дополнение к разделу basicHttpBinding. У нас есть служба webapi, вызывающая wcf. метод webapi ломал объект слишком большой ошибкой, когда он называл метод службы wcf. Это изменение было применено в файле web.config службы wcf.

                        

Ответ 5

Добавьте это для меня:

    <bindings>
        <basicHttpBinding>
            <binding name="BasicHttpBinding_Example"
 maxBufferSize="2147483647" 
maxReceivedMessageSize="2147483647">
            </binding>
        </basicHttpBinding>
    </bindings>