2011-02-05 36 views
8

我在通過WCF實現Web Service時遇到了一些問題。雖然我M在WCF方法從客戶機應用程序傳遞值作爲字符串(XML),得到錯誤WCF - Win App「在讀取XML數據時已超出最大字符串內容長度配額(8192)。」

格式化拋出異常 而試圖反序列化 消息:時同時 嘗試反序列化參數的錯誤 http://tempuri.org/:XmlEntity

InnerException信息是

「時發生錯誤,反序列化System.String類型的 對象。 最大字符串內容長度配額 (8192)已被超過,同時讀取 XML數據。通過在創建XML閱讀器時更改 XmlDictionaryReaderQuotas對象所使用的 上的MaxStringContentLength 屬性,可以增加此配額 。行 249,位置19。

我試圖改變客戶端web.configuration文件中的maxStringContentLength的值,但錯誤仍然保持不變。請儘快找出解決方案。

+2

您可以在客戶端和服務器上發佈配置文件的內容嗎? – Tridus 2011-02-05 11:18:40

回答

7

嘗試在服務器和客戶端上增加該值:

<binding 
    name="myBinding" 
    maxReceivedMessageSize="2147483647"> 
     <readerQuotas 
      maxDepth="2147483647" 
      maxStringContentLength="2147483647" 
      maxArrayLength="2147483647" 
      maxBytesPerRead="2147483647" 
      maxNameTableCharCount="2147483647" /> 
</binding> 
+0

我已經檢查過這些設置,但仍然失敗。我在運行時檢查了提到的屬性的值,它們是正確的。 – 2011-02-05 10:54:17

12

阿希什,達林意味着你應該已經創建了一個basicHttpBinding的覆蓋和增加maxStringContentLength的值到2147483647可以確認是否您已將端點配置爲使用與bindingConfiguration屬性相同的binidng。例如,你已經創建了一個綁定這樣,

<basicHttpBinding> 
    <binding name="HandleLargeMessage" maxReceivedMessageSize="2147483647">   
     <readerQuotas maxDepth="2147483647" 
     maxStringContentLength="2147483647" 
     maxArrayLength="2147483647" 
     maxBytesPerRead="2147483647" 
     maxNameTableCharCount="2147483647" /> 
    </binding> 

您可以配置端點使用上述這樣的綁定配置,(請注意bindingConfiguration屬性)

<endpoint 
    address="....." 
    binding="basicHttpBinding" bindingConfiguration="HandleLargeMessage" 
    contract="xxx" /> 

你能確認你是否已經做到了?很可能在這裏似乎不是這種情況。

如果您已經遵循這一點,並且想確認它是否被使用,請在詳細級別爲服務和客戶端應用程序捕獲WCF跟蹤,並檢查Construct Host中的活動以及客戶端應用程序中的Construct Channel。

-1

應增加maxStringContentLength的大小。但是你不應該盲目地把所有的數值都加到這個數字上。例如,maxDepth涉及XML中的嵌套級別,最好將其保留爲默認值。

1

與WCF一樣,這裏是增加MaxStringContentLength的程序化替代方案。

BasicHttpBinding binding = new BasicHttpBinding(); 
binding.ReaderQuotas.MaxStringContentLength = 2147483647 

host.AddServiceEndpoint(contract, binding, address); 
相關問題