2011-03-17 52 views
2

我有一個WCF Web服務接受一些自定義對象和一些文件作爲字節數組發送。WCF WS引發MaxReceivedMessageSizeExceeded

但是,每次我發送一個文檔(不是特別大的一個)時,WS返回一個400錯誤的請求,並且在跟蹤日誌中它似乎拋出了一個MaxReceivedMessageSizeExceeded。 句話

System.ServiceModel.ProtocolException: 的最大消息大小配額 傳入消息(65536)一直 超出。要增加配額,請使用 MaxReceivedMessageSize屬性 上適當的綁定元素。

現在的客戶端應用程序有這個在其app.config

<wsHttpBinding> 
    <binding name="WSHttpBinding_IReferrals" 
     closeTimeout="00:01:00" openTimeout="00:01:00" 
     receiveTimeout="00:10:00" sendTimeout="00:01:00" 
     bypassProxyOnLocal="false" transactionFlow="false" 
     hostNameComparisonMode="StrongWildcard" 
     maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647" 
     messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 
     allowCookies="false"> 
     <readerQuotas maxDepth="32" 
      maxStringContentLength="8192" maxArrayLength="16384" 
      maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 

,並在WCF web.config我有這個

<service behaviorConfiguration="WCFReferrals.Service1Behavior" 
     name="WCFReferrals.Referrals"> 
    <endpoint address="" binding="wsHttpBinding" contract="WCFReferrals.IReferrals"> 
      <identity> 
      <dns value="localhost" /> 
      </identity> 
    </endpoint> 
    <endpoint address="mex" binding="wsHttpBinding" contract="IMetadataExchange" /> 
</service> 
.... 
<binding name="wsHttpBinding" maxBufferPoolSize="2147483647" 
      maxReceivedMessageSize="2147483647"> 
    <readerQuotas maxDepth="32" maxStringContentLength="2147483647" 
      maxArrayLength="2147483647" maxBytesPerRead="4096" 
      maxNameTableCharCount="16384" /> 
</binding> 

顯然我失去了一些東西的,據我可以看到我有所有的最大消息限制設置waaaaay什麼是必要的..

任何幫助窩ULD愉快地接受

感謝

NAT

回答

2

首先:在你的服務器端,你定義使用較大的消息大小的綁定配置,但你不從引用它你端點。

<service behaviorConfiguration="WCFReferrals.Service1Behavior" 
     name="WCFReferrals.Referrals"> 
    <endpoint 
     address="" 
     binding="wsHttpBinding" 
     bindingConfiguration="LargeSizeMessages" <== you need to reference the binding config (by specifying its name 
     contract="WCFReferrals.IReferrals"> 
    </endpoint> 
    ..... 
    </service> 
    .... 
    <binding name="LargeSizeMessages" <== give it a meaningful name 
     maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"> 
     <readerQuotas maxDepth="32" maxStringContentLength="2147483647" 
      maxArrayLength="2147483647" maxBytesPerRead="4096" 
      maxNameTableCharCount="16384" /> 
    </binding> 

另外:你是否在你的客戶端做同樣的事情?您的客戶端配置(app.configweb.config)是否也包含大消息大小綁定配置?你是引用你的<client> .. <endpoint>元素中的綁定配置?

+1

這是完全新的,這工作的一種享受。我想我在想,綁定屬性指向你想要的綁定。不是綁定配置。非常感謝。 – nat 2011-03-17 10:01:42

+0

@nat:對於單個綁定,您可以有任意數量的綁定配置 - 這就是爲什麼您需要通過名稱引用端點所需的配置 – 2011-03-17 10:06:09