2013-01-31 35 views
25

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.

Trả lời

24

Câu trả lời đang nhìn chằm chằm vào mặt tôi.

Cấu hình do svcutil tạo cho khách hàng. Tôi đã sử dụng nó trên máy chủ.

Tôi đã chỉnh sửa các liên kết cho các điểm cuối được chỉ định trong <client>, điều này hoàn toàn không có sự khác biệt đối với dịch vụ.

Thêm một điểm cuối thích hợp <service> và đặt maxReceivedMessageSize và maxBufferSize vào liên kết đã giải quyết vấn đề.

+3

Để 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 đó. –

+1

Cảm ơn vì điều này. Tôi có thể đi cả ngày mà không nhận ra nó. –

+1

Đ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

23

Tôi gặp sự cố tương tự. Đối với tôi, vấn đề là điểm cuối của tôi không đặt tên ràng buộc một cách rõ ràng bằng cách sử dụng bindingConfiguration và vì vậy phải có một số điểm mặc định ở đâu đó.

tôi đã:

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

và thiết bị đầu cuối của tôi định nghĩa là:

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

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

Nó làm việc một khi tôi đã thay đổi thiết bị đầu cuối để:

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

Thêm này giải quyết nó cho tôi:

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

đã thử mọi thứ từ 10 blog khác nhau và đồng nghiệp của tôi đã tìm ra. chúng tôi đã phải thêm phần basicHttpsBinding bên trong phần ngoài phần basicHttpBinding. Chúng tôi có một dịch vụ webapi gọi wcf. phương pháp webapi đã bắt được thực thể lỗi quá lớn khi nó được gọi là phương thức dịch vụ wcf. Thay đổi này đã được áp dụng trong tệp web.config của dịch vụ wcf.

Các vấn đề liên quan