Мой вызов веб-службы 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>
), она не работает с большими запросами.