cuộc gọi của tôi để dịch vụ web WCF của tôi là thất bại với System.Net.WebException: The request failed with HTTP status 413: Request Entity Too Large.
maxReceivedMessageSize không sửa chữa 413: Yêu cầu Entity Too Large
Kiểm tra Fiddler, tôi thấy rằng tôi đang gửi:
Content-Length: 149.839
Trên 65KB.
Cho phép WCF truy tìm trên máy chủ, tôi thấy:
System.ServiceModel.ProtocolException: Thông điệp kích thước tối đa hạn ngạch cho tin nhắn đến (65536) đã bị vượt quá. Để tăng hạn ngạch , hãy sử dụng thuộc tính MaxReceivedMessageSize trên phần tử ràng buộc thích hợp.
Việc thêm thuộc tính này không giải quyết được sự cố.
Tôi đã thử chỉ với thuộc tính đó và (sau này) với nhiều bài đăng khác mà bài đăng đã đề xuất. Dưới đây là những gì tôi có hiện (trên máy chủ):
<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>
endpoint duy nhất của tôi (dưới <client>
) là:
<endpoint address="/NetPricingService/Service.asmx"
binding="basicHttpBinding" bindingConfiguration="PricerServiceSoap"
contract="Pricing.PricerService.PricerServiceSoap"
name="PricerServiceSoap" />
Tôi cũng nói thêm:
<dataContractSerializer maxItemsInObjectGraph="2147483647"/>
dưới <behavior>
.
Tôi thậm chí đã chạy (đối với IIS 7):
%windir%\system32\inetsrv\appcmd set config "WebServicesDev/PricingService"
-section:requestFiltering -requestLimits.maxAllowedContentLength:104857600
-commitpath:apphost
Không có gì làm cho bất kỳ sự khác biệt.
Một trong số đó là dịch vụ WCF nhằm thay thế dịch vụ ASMX cũ hơn. Bộ xương dịch vụ được tạo ra với svcutil từ WSDL hiện có. Tôi không thể thay đổi cấu hình máy khách (và khách hàng sử dụng nhiều ngôn ngữ). Dự án khách hàng thử nghiệm của tôi đã nhập dịch vụ với Thêm tham chiếu web (dưới Add Service Reference/Advanced
), vì vậy tôi không có cấu hình WCF. Tuy nhiên, máy khách thử nghiệm hoạt động nếu tôi trỏ nó vào dịch vụ ASMX cũ hơn.
Làm cách nào để khắc phục hoặc chẩn đoán điều này?
thông tin bổ sung
Nếu tôi sử dụng Configuration Editor Dịch vụ Microsoft để tạo ra các cấu hình (thiết maxReceivedMessageSize và MaxBufferSize), nó hoạt động. Vấn đề là điểm cuối được xác định theo <service>
và nó sẽ không cho phép tôi chỉ định địa chỉ tương đối /NetPricingService/Service.asmx. Nếu tôi chỉnh sửa các ràng buộc trong cấu hình do svcutil tạo (nơi điểm cuối dưới <client>
), nó không hoạt động với các yêu cầu lớn.
Để thêm chi tiết cụ thể để trả lời TrueWill của: Bạn cần phải thêm thẻ để web.config nơi tổ chức các dịch vụ web không thay đổi thẻ trong web.config nơi dịch vụ bị ràng buộc. Trong thẻ thêm tham chiếu vào liên kết mới thông qua cấu trúc ràng buộc. Tạo ràng buộc mới dưới nút bindings và thêm các thiết lập maxBufferPoolSize và maxReceivedMessageSize vào đó. –
Cảm ơn vì điều này. Tôi có thể đi cả ngày mà không nhận ra nó. –
Điều này cuối cùng đã cho tôi giải pháp của tôi. Cấu hình .NET4 "đơn giản" trong đó phần '' không bắt buộc "không sử dụng httpBinding của tôi .. thêm vào dịch vụ một cách rõ ràng với ràng buộc đã khắc phục được sự cố. –
user2864740