2011-02-18 59 views
9

好吧,我已經建立並測試了一個很好的小WCF服務。客戶端創建一個字符串並將其傳遞給服務上的一個方法,然後該服務將其另存爲一個文件。用少量的測試數據的完美作品,但是當我有什麼應該做的嘗試 - 通過一些序列化.NET對象 - 它屬於過去,與錯誤在哪裏增加maxStringContentLength爲了讓WCF傳遞大字符串?

格式化扔同時 嘗試反序列化異常消息: 錯誤反序列化請求主體 消息操作最大字符串 內容長度配額(8192)在讀取XML數據時已被超出。這種配額可能會增加通過更改XmlDictionaryReaderQuotas的MaxStringContentLength屬性創建XML閱讀器

所以我瞪着這一點,並發現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)時,我被gobsmacked發現這個auto - 生成文件沒有包含我的變化,並已重置爲:

<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 

我不知道從哪裏它是從獲得這些值 - 無處在我的整個解決方案中的這些被設置。所以它必須使用默認值,但我不明白爲什麼當我在服務器和客戶端都提供自定義配置文件時,它使用默認值。

任何人都可以幫我解決這個問題嗎?

+1

你可以發佈綁定的配置,你把`readerQuotas`元素放在哪裏? – vlad 2011-02-18 16:36:45

回答

4

1)您的端點可能沒有正確引用自定義綁定嗎?你能發佈你的綁定和端點部分嗎?

2)WcfTestClient不使用您的服務或客戶端配置來設置其自己的配置。在執行服務之前,您需要使用SvcConfigEditor手動編輯Client.dll.config以設置WcfTestClient客戶端綁定數據。

如果您查看工具 - >選項菜單,則可以保留WcfTestClient配置更改。有關WcfTestClient更多信息,檢查了這一點:http://msdn.microsoft.com/en-us/library/bb552364.aspx

0

你還需要增加maxReceiveMessageSize等在這樣的結合本身...

綁定名稱=「BasicHttpsBinding_IService1」 maxReceivedMessageSize =「3400」 maxBufferPoolSize =」 34000000「maxBufferSize =」34000000「