2012-06-17 36 views
35

Tôi dường như không thể nhận được dịch vụ WCF của mình để chấp nhận một lượng lớn dữ liệu được gửi tới nó.Dịch vụ WCF maxReceivedMessageSize basicHttpBinding issue

Tôi đã định cấu hình maxReceivedMessageSize cho ứng dụng khách và có thể nhận dữ liệu lớn chỉ tốt, đó không phải là vấn đề. Nó đang gửi dữ liệu đến dịch vụ.

Tôi đã cố gắng định cấu hình dịch vụ nhưng chưa có bất kỳ may mắn nào. Đây là web.config của tôi:

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
    <compilation debug="true"/> 
    </system.web> 
    <system.serviceModel> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <serviceMetadata httpGetEnabled="true"/> 
      <serviceDebug includeExceptionDetailInFaults="false" /> 
      <serviceDiscovery /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <services> 
     <service name="Service.IService"> 
     <clear /> 
     <endpoint binding="basicHttpBinding" bindingConfiguration="MessageSizeBasic" contract="Service.IService" /> 
     </service> 
    </services> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="MessageSizeBasic" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> 
      <readerQuotas maxDepth="32" maxStringContentLength="2147483647" 
      maxArrayLength="16348" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
     </binding> 
     </basicHttpBinding> 
     <webHttpBinding> 
     <binding name="MessageSizeWeb" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" /> 
     </webHttpBinding> 
    </bindings> 
    </system.serviceModel> 
<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    </system.webServer> 
</configuration> 

Trả lời

61

Xóa tên khỏi ràng buộc sẽ làm cho nó áp dụng cho tất cả các điểm cuối và sẽ tạo ra kết quả mong muốn. Như vậy:

<services> 
    <service name="Service.IService"> 
    <clear /> 
    <endpoint binding="basicHttpBinding" contract="Service.IService" /> 
    </service> 
</services> 
<bindings> 
    <basicHttpBinding> 
    <binding maxBufferSize="2147483647" maxReceivedMessageSize="2147483647"> 
     <readerQuotas maxDepth="32" maxStringContentLength="2147483647" 
     maxArrayLength="16348" maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
    </binding> 
    </basicHttpBinding> 
    <webHttpBinding> 
    <binding maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" /> 
    </webHttpBinding> 
</bindings> 

Cũng lưu ý rằng tôi loại bỏ các bindingConfiguration thuộc tính từ nút đầu cuối. Nếu không, bạn sẽ nhận được một ngoại lệ.

Giải pháp này tương tự đã được tìm thấy ở đây: Problem with large requests in WCF

+1

Thank you very much. Như một lưu ý, tôi cũng đã phải loại bỏ thuộc tính bindingConfiguration khỏi điểm cuối của tôi vì nó đã tham chiếu đến một tên mà tôi đã lấy ra. – BlargleMonster

+1

Các giải pháp được cung cấp không hoạt động đối với tôi. – Arti

+0

Tôi còn cần phải làm gì ngoài những thay đổi trên trong web.config? – Arti

0

là tên của lớp dịch vụ của bạn thực sự IService (trên namespace Service)? Những gì bạn có thể ban đầu là không phù hợp trong tên của lớp dịch vụ trong thuộc tính name của phần tử <service>.

+0

Giao diện dịch vụ của tôi thực sự là IService vào lúc này. Tôi có thể thay đổi nó sau nhưng bây giờ nó là một chút của một singleton trong hệ thống của tôi. – BlargleMonster

+1

Giao diện * dịch vụ * hoặc dịch vụ ** lớp **? Giá trị của thuộc tính 'name' cho phần tử' 'phải là tên của dịch vụ ** class **. – carlosfigueira

+0

Tôi đã thử các tùy chọn đó và đó là một giải pháp khả thi khác. Tôi không chắc tại sao công cụ Trình chỉnh sửa cấu hình dịch vụ chỉ cho phép tôi chọn giao diện khi quản lý dịch vụ của mình nhưng tôi rất vui khi biết cách khác để khắc phục sự cố nếu tôi cần sử dụng lại tên. – BlargleMonster

0

Khi sử dụng HTTPS thay vì ON các ràng buộc, đặt nó trong các ràng buộc với thẻ httpsTransport:

<binding name="MyServiceBinding"> 
     <security defaultAlgorithmSuite="Basic256Rsa15" 
       authenticationMode="MutualCertificate" requireDerivedKeys="true" 
       securityHeaderLayout="Lax" includeTimestamp="true" 
       messageProtectionOrder="SignBeforeEncrypt" 
       messageSecurityVersion="WSSecurity10WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10" 
       requireSignatureConfirmation="false"> 
     <localClientSettings detectReplays="true" /> 
     <localServiceSettings detectReplays="true" /> 
     <secureConversationBootstrap keyEntropyMode="CombinedEntropy" /> 
     </security> 
     <textMessageEncoding messageVersion="Soap11WSAddressing10"> 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
         maxArrayLength="2147483647" maxBytesPerRead="4096" 
         maxNameTableCharCount="16384"/> 
     </textMessageEncoding> 
     <httpsTransport maxReceivedMessageSize="2147483647" 
         maxBufferSize="2147483647" maxBufferPoolSize="2147483647" 
         requireClientCertificate="false" /> 
    </binding> 
Các vấn đề liên quan