為了讓 WCF 傳遞大字元串,在哪裡增加 maxStringContentLength?
好的,我已經設置並測試了一個不錯的小 WCF 服務。客戶端創建一個字元串並將其傳遞給服務的方法,然後服務將其保存為文件。與少量測試數據完美配合,但是當我嘗試它應該做的事情時 - 傳遞一些序列化的 .net 對象 - 它會失敗,並出現錯誤
格式化程序在嘗試反序列化消息時拋出異常:讀取 XML 數據時已超出操作最大字元串內容長度配額 (8192) 的請求消息正文的反序列化錯誤。可以通過更改創建 XML 閱讀器時使用的 XmlDictionaryReaderQuotas 對象的 MaxStringContentLength 屬性來增加此配額
所以我看了一下,發現 MaxStringContentLength 屬性應該設置在配置文件標籤內的“readerQuotas”標籤上,如下所示:
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />所以我改變它。我在客戶端的 App.config 文件上更改它。我在我的伺服器的 App.config 文件和 Web.config 文件上更改它。我在我的單元測試項目的 App.config 文件中更改它。而且這些都不起作用 - 我不斷收到同樣的錯誤。
有趣且令人沮喪的是,當我啟動 WcfClient.exe 以查看我的服務、連接到它並查看配置文件 (Client.dll.config) 時,我驚訝地發現這個自動生成的文件包含我沒有任何更改並已重置為:
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384" />我不知道它是從哪裡獲得這些值的——在我的整個解決方案中都沒有設置這些值。所以它必須使用預設值,但是當我在伺服器和客戶端都提供自定義配置文件時,我不明白為什麼它使用預設值。
誰能幫我解開這個問題?
1)您的端點是否可能沒有正確引用自定義綁定?你能發布你的綁定和端點部分嗎?
- WcfTestClient 不使用您的服務或客戶端配置來設置自己的配置。在執行服務之前,您需要使用 SvcConfigEditor 手動編輯 Client.dll.config 以設置 WcfTestClient 客戶端綁定數據。
如果您查看工具 -> 選項菜單,您可以保留您的 WcfTestClient 配置更改。有關 WcfTestClient 的更多資訊,請查看:http: //msdn.microsoft.com/en-us/library/bb552364.aspx