Moje wezwanie do mojego serwisu WWW WCF się niepowodzeniem z System.Net.WebException: The request failed with HTTP status 413: Request Entity Too Large.
maxReceivedMessageSize nie ustalające 413: Zbyt duże żądanie
Sprawdzanie Skrzypek, widzę, że wyślę:
Content-Length: 149839
Który ma ponad 65KB.
Włączanie śledzenia WCF na serwerze, widzę:
System.ServiceModel.ProtocolException: kontyngent rozmiar Maksymalna wiadomość dla przychodzących wiadomości (65536) został przekroczony. Aby zwiększyć limit o , użyj właściwości MaxReceivedMessageSize na odpowiednim elemencie wiążącym .
Dodawanie tej właściwości nie rozwiązuje problemu.
Próbowałem już z tą własnością i (później) z różnymi innymi, które sugerowały posty. Oto co mam obecnie (na serwerze):
<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>
moim jedynym punkt końcowy (pod <client>
) wynosi:
<endpoint address="/NetPricingService/Service.asmx"
binding="basicHttpBinding" bindingConfiguration="PricerServiceSoap"
contract="Pricing.PricerService.PricerServiceSoap"
name="PricerServiceSoap" />
Dodałem także:
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
pod <behavior>
.
mam nawet uruchomić (na IIS 7):
%windir%\system32\inetsrv\appcmd set config "WebServicesDev/PricingService"
-section:requestFiltering -requestLimits.maxAllowedContentLength:104857600
-commitpath:apphost
Nic nie czyni żadnej różnicy.
Jeden połów polega na tym, że jest to usługa WCF przeznaczona do zastąpienia starszej usługi ASMX. Szkielet usługi został wygenerowany za pomocą svcutil z istniejącego WSDL. Nie mogę zmienić konfiguracji klienta (a klienci są w wielu językach). Mój projekt klienta testowego zaimportował usługę za pomocą Dodaj odniesienie do sieci (pod Add Service Reference/Advanced
), więc nie mam konfiguracji WCF. Jednak klient testowy działa, jeśli wskażę go na starszą usługę ASMX.
Jak mogę to naprawić lub zdiagnozować?
Dodatkowe informacje
Jeśli używam Microsoft Service Edytora konfiguracji, aby wygenerować config (ustawienie maxReceivedMessageSize i maxBufferSize), to działa. Problem polega na tym, że punkt końcowy jest określony pod numerem <service>
i nie pozwala mi podać względnego adresu /NetPricingService/Service.asmx. Jeśli edytuję wiązania w konfiguracji generowanej przez svcutil (gdzie punkt końcowy znajduje się pod <client>
), to nie działa on w przypadku dużych żądań.
Aby dodać do specyfiki odpowiedź TrueWill za: Trzeba dodać tag do web.config którym odbywa usługa internetowa nie którym usługa zmienić tag w pliku web.config jest związany. W znaczniku dodaj odwołanie do nowego powiązania za pomocą instrukcji binding. Utwórz nowe powiązanie w węźle powiązań i dodaj tam ustawienia maxBufferPoolSize i maxReceivedMessageSize. –
Dzięki za to. Mógłbym przejść cały dzień, nie zauważając tego. –
To w końcu doprowadziło mnie do mojego rozwiązania. "Prosta" konfiguracja .NET4, w której sekcja "" nie jest "wymagana", nie korzystała z mojego httpBinding. Dodanie usługi jawnie z powiązaniem rozwiązało problem. –
user2864740