2011-11-13 57 views
6

可怕的WCF BAD請求400上帝你不只是喜歡WCF。由於maxReceivedMessageSize仍然是65536

我閱讀所有可能的線程,但我現在真的卡住了。

這裏是WCF配置:

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="BaseHttp" 
        maxBufferSize="4194304" 
        maxBufferPoolSize="4194304" 
        maxReceivedMessageSize="4194304" /> 
     </basicHttpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior name="TaskServiceBehavior"> 
      <serviceMetadata httpGetEnabled="True" /> 
      <serviceDebug includeExceptionDetailInFaults="True" /> 
     </behavior> 
     <behavior name=""> 
      <serviceMetadata httpGetEnabled="true" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <services> 
     <service behaviorConfiguration="TaskServiceBehavior" name="TaskService"> 
     <endpoint 
      address="http://www.mysite.com/TableTaskService/TableTaskService.svc" 
      binding="basicHttpBinding" bindingConfiguration="BaseHttp" 
      contract="TableTaskService.ITableTaskService" /> 
     <endpoint 
      address="mex" 
      binding="mexHttpBinding" 
      contract="IMetadataExchange" /> 
     <host> 
      <baseAddresses> 
       <add baseAddress="http://www.mysite.com/TableTaskService/" /> 
      </baseAddresses> 
     </host> 
     </service> 
    </services> 
    <serviceHostingEnvironment> 
     <baseAddressPrefixFilters> 
     <add prefix="http://www.mysite.com/" /> 
     </baseAddressPrefixFilters> 
    </serviceHostingEnvironment> 
</system.serviceModel> 

現在我發送消息並拋出這個默認的異常(在svclog文件SAW):

的最大郵件大小配額傳入消息(65536 )已經超過 。要增加配額,請在適當的綁定元素上使用MaxReceivedMessageSize 屬性。

現在我明確指出它應該是4mb。

我的客戶端代碼:

TableTaskServiceClient client = 
    new TableTaskServiceClient(
      new BasicHttpBinding { MaxBufferSize = 4194304, 
           MaxReceivedMessageSize = 4194304 }, 
      new EndpointAddress(GetEndpointAddressString()) 
    ); 

然而,它在我拋出這個65536尺寸誤差。它來自哪裏?..

也真的很重要客戶端設置MaxReceivedMessageSize與服務器的值相同嗎?我認爲服務器負責確定長度而不是客戶端是合乎邏輯的。

還有一個警告(注意它的用處是什麼,它是什麼意思,沒有關於被覆蓋的元素的信息,或者我錯過了什麼),也許basichttpbinding正是被覆蓋的東西?但爲什麼會這樣呢?無論如何:

[TraceRecord]嚴重性警告 TraceIdentifier http://msdn.microsoft.com/en-US/library/System.ServiceModel.OverridingDuplicateConfigurationKey.aspx 說明配置系統檢測到一個 不同的配置範圍重複的鍵,並且與更近 值重寫。 的AppDomain/LM/W3SVC/11/ROOT/TableTaskService-33-1296567 源System.ServiceModel.Configuration.ServiceBehaviorElementCollection/-851144413 的ElementName行爲OldElementLineNumber 0 NewElementLineNumber 0

UPDTE: 重新配置既服務和客戶端:

TableTaskServiceClient client = new TableTaskServiceClient(
         new BasicHttpBinding { 
          MaxBufferSize = 4194304, 
          MaxReceivedMessageSize = 4194304, 
          MaxBufferPoolSize=4194304, 
          ReaderQuotas = new XmlDictionaryReaderQuotas 
               { 
                MaxArrayLength = 4194304, 
                MaxBytesPerRead = 4194304, 
                MaxDepth = 4194304, 
                MaxNameTableCharCount = 4194304, 
                MaxStringContentLength = 4194304 
               } 
         }, new EndpointAddress(GetEndpointAddressString())); 

同樣的錯誤仍然存​​在。

如果是這樣的一些利益,我送的467000一個byte []數組〜長度

回答

1

試試這個:

<basicHttpBinding> 
    <binding name="BaseHttp" 
      maxBufferSize="4194304" 
      maxBufferPoolSize="4194304" 
      maxReceivedMessageSize="4194304"> 
    <readerQuotas maxArrayLength="4194304" 
        maxBytesPerRead="4194304" 
        maxDepth="4194304" 
        maxNameTableCharCount="4194304" 
        maxStringContentLength="4194304" 
        /> 
    </binding> 
</basicHttpBinding> 

雖然其中一些設置沒有意義,但我只是將它們設置爲較大的值。

此外,一旦你得到這個工作,我強烈建議你削減值,因爲他們目前在您的網站上,以防止DoS attacks

+0

同樣的錯誤。我確認了幾次,這個配置用於服務配置(改爲BaseHttp1,看到錯誤,改回來了,服務在瀏覽器中工作正常),但仍然一樣。我相信它應該工作..但它沒有。 –

+0

您是否正在配置服務和客戶端?因爲我敢打賭,客戶端也有一個上限設置。 –

+0

是重新配置這兩個地方。 –