2009-08-27 29 views
15

Tôi có một máy chủ bên App.config sau cho một dịch vụ WCF:WCF maxReceivedMessageSize không được đọc từ cấu hình

<system.serviceModel> 
    <bindings> 
     <wsHttpBinding> 
     <binding name="default" maxReceivedMessageSize="5000000"> 
      <readerQuotas maxStringContentLength="5000000" maxArrayLength="5000000" /> 
     </binding> 
     </wsHttpBinding> 
    </bindings> 
    <services> 
     <service behaviorConfiguration="Core.TOAService.Service1Behavior" 
     name="Core.TOAService.TOAService"> 
     <endpoint address="" binding="wsHttpBinding" contract="Core.TOAService.ITOAService"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
     </endpoint> 
     <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
     <host> 
      <baseAddresses> 
      <add baseAddress="http://localhost:8732/Design_Time_Addresses/Core.TOAService/TOAService/" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="Core.TOAService.Service1Behavior"> 
      <!-- To avoid disclosing metadata information, 
      set the value below to false and remove the metadata endpoint above before deployment --> 
      <serviceMetadata httpGetEnabled="True"/> 
      <!-- To receive exception details in faults for debugging purposes, 
      set the value below to true. Set to false before deployment 
      to avoid disclosing exception information --> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    </system.serviceModel> 

Khi tôi cố gắng và vượt qua dịch vụ này một file largish (chỉ ~ 250KB), tôi nhận được một ngoại lệ đã đăng nhập vào tệp svclog:

Giới hạn kích thước thư tối đa cho thông báo gửi đến (65536) đã bị vượt quá . Để tăng hạn ngạch, hãy sử dụng thuộc tính MaxReceivedMessageSize trên yếu tố ràng buộc phù hợp.

Như bạn có thể thấy từ phần ràng buộc ở đầu cấu hình, tôi đã cố đặt maxReceivedMessageSize thành 5000000 nhưng dịch vụ vẫn cho rằng nó được đặt thành 65536 mặc định. hoặc yếu tố ràng buộc "thích hợp" là gì?

Trả lời

27

Có nhiều cài đặt :-) Hãy thử "maxBufferPoolSize" và "maxBufferSize" trên thẻ <binding>.

Nhưng vấn đề lớn nhất là: điểm cuối của bạn không không tham chiếu cấu hình ràng buộc đó!

<endpoint address="" 
      binding="wsHttpBinding" contract="Core.TOAService.ITOAService"> 

Bạn cần phải thêm một tham chiếu đến nó để nó trở nên hữu ích - chỉ gọi đó là "mặc định" không làm việc .....

<endpoint address="" 
      binding="wsHttpBinding" 
      bindingConfiguration="default" 
      contract="Core.TOAService.ITOAService"> 

Bạn đang đi trước thời đại của bạn ;-) Trong WCF 4 (với .NET 4.0 - đôi khi vào cuối năm 2009), bạn sẽ có thể xác định "cấu hình ràng buộc mặc định" mà không cần phải đặt tên và tham chiếu một cách rõ ràng - nhưng bây giờ, bạn cần tạo liên kết giữa điểm cuối của bạn và ràng buộc của nó và bất kỳ cấu hình ràng buộc (hoặc hành vi) nào bạn có!

Marc

+0

Có, bạn phải tham khảo cấu hình liên kết. Thay đổi bộ đệm có thể không cần thiết. –

+0

Nó không bao giờ khá rõ ràng nếu và trong đó ba thay đổi bộ đệm là thực sự cần thiết - nó giúp để thử, và xem. Có thực sự không có tài liệu, giải thích và tài liệu toàn diện tốt về cách tinh chỉnh các cài đặt đó, thật không may .... –

+0

Doh, máy chủ của tôi thích hợp để sử dụng VS2010 để xây dựng một dịch vụ 3.5! Rất cám ơn, đó là cố định nó. –

1

Có một số địa điểm bạn cần đặt kích thước. Trong trường hợp của bạn, tôi nghĩ rằng bạn cần phải thêm hạn ngạch đọc. Dưới đây là một ví dụ:

<basicHttpBinding> 
    <binding name="httpBasicBinding_Service" closeTimeout="00:03:00" 
     openTimeout="00:03:00" receiveTimeout="00:10:00" sendTimeout="00:03:00" 
     maxBufferSize="2000001" 
     maxBufferPoolSize="2000001" maxReceivedMessageSize="2000001"> 
     <readerQuotas maxDepth="2000001" maxStringContentLength="2000001" 
     maxArrayLength="2000001" maxBytesPerRead="2000001" maxNameTableCharCount="2000001" /> 
    </binding> 
    </basicHttpBinding> 
15

Nếu bạn vẫn nhận được thông báo lỗi này khi sử dụng thử nghiệm Khách hàng WCF, đó là vì các khách hàng có một riêng biệt MaxBufferSize thiết lập.

Để khắc phục vấn đề này:

  1. Right-Click trên Config file nút ở dưới cùng của cây
  2. Chọn Edit với SvcConfigEditor

Một danh sách các cài đặt có thể chỉnh sửa sẽ xuất hiện, bao gồm MaxBufferSize.

Lưu ý:Máy khách proxy được tạo tự động cũng đặt MaxBufferSize thành 65536 theo mặc định.

+1

Tốt bắt! Điều đó giải quyết được vấn đề của tôi ... –

+0

THANK YOUUUU !!! – RoeeK

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