2010-10-05 36 views
8

我沒有問題檢索大量的數據,但發送回服務顯示此錯誤。我已經嘗試將該元素添加到web.config和servicereferences.clientconfig中,並且無法識別它們。有一次,我收到了有關將readerQuotas添加到bindingElementExtensions的消息,但是我找不到有關如何執行此操作的任何有用信息。我發現帖子說我必須修改devenv.exe.config等,但這樣做VS.我一直試圖解決這個問題兩天,所以任何幫助將不勝感激。另一個「讀取XML數據時超出了最大字符串內容長度限額(8192)」。問題與WCF和Silverlight 4

編輯:這裏的web.config中的結合部分:

<bindings> 
    <customBinding> 
    <binding name="QaRiM.Web.Service1.customBinding0"> 
     <binaryMessageEncoding /> 
     <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" /> 
    </binding> 
    </customBinding> 
</bindings> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" 
    multipleSiteBindingsEnabled="true" /> 
<services> 
    <service name="QaRiM.Web.Service1"> 
    <endpoint address="" binding="customBinding" bindingConfiguration="QaRiM.Web.Service1.customBinding0" 
     contract="QaRiM.Web.Service1" /> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    </service> 
</services> 

和servicereferences.clientconfig:

<configuration> 
    <system.serviceModel> 
     <bindings> 
      <customBinding> 
       <binding name="CustomBinding_Service1"> 
        <binaryMessageEncoding /> 
        <httpTransport maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" /> 
       </binding> 
      </customBinding> 
     </bindings> 
     <client> 
      <endpoint address="http://localhost:36533/Service1.svc" binding="customBinding" 
       bindingConfiguration="CustomBinding_Service1" contract="ServiceReference1.Service1" 
       name="CustomBinding_Service1" /> 
     </client> 
    </system.serviceModel> 
</configuration> 

兩個人都被VS.產生

+0

您可以發佈您的客戶端和服務配置文件的綁定元素只是用在這裏看到XmlDictionaryReaderQuotas的實例?也是服務的端點,因爲它應該引用綁定。 – Jab 2010-10-05 19:35:27

回答

9

您只是缺少maximum string content length的配置。

添加到您的綁定屬性(客戶端和服務器)

<readerQuotas maxStringContentLength="2147483647" /> 

對不起,我不知道,這個孩子元件位於編碼下使用自定義綁定時使用,這似乎是在你的例子中爲binaryMessageEncoding。如果不是,請嘗試其他編碼。

<bindings> 
    <customBinding> 
     <binding name="QaRiM.Web.Service1.customBinding0">     
      <binaryMessageEncoding> 
       <readerQuotas maxStringContentLength="2147483647"/> 
      </binaryMessageEncoding> 
     </binding> 
    </customBinding> 
</bindings> 
+1

這就是問題所在,它不是一個有效的綁定屬性。 – 2010-10-05 20:33:13

+0

@吉姆佩裏請看看我的答案更新。 – Jab 2010-10-05 21:29:39

+0

這也行不通。它在服務配置中無效,並且在web.config中每次調用服務都會使應用程序崩潰。 – 2010-10-06 11:27:27

1

編輯:此保存不完整的草案,對不起

  1. 同步的服務/客戶端的定義是你做了什麼,但它絕對必須讓它們匹配。
  2. 你確定你需要自定義綁定嗎?你有沒有嘗試過使用ws(Dual)HttpBinding作爲基礎?
  3. 此帖可能會對此感興趣:silverlight 3 wcf service configuration -- getting maxreceivedmessagesize error,具體爲httpRuntime maxRequestLength =「2147483647」設置。
  4. 您可能需要設置maxBufferPoolSizemaxItemsInObjectGraph。鏈接的SO帖子中的配置幾乎讓所有東西都變得最大化。
  5. 我不知道你是否使用ChannelFactory客戶端代理方法或服務引用方法,但你可能希望去以前的路線。在調試會話中,我發現配置中的某些值沒有按照我的想法被應用,但是我的短期內容在這個主題上已經失去了。
  6. 與#5有點相似,您可以遇到WCF Test Client問題,其中測試客戶端正在使用您未準備好的默認綁定。
  7. 另一篇文章可能會感興趣:http://www.haveyougotwoods.com/archive/2008/04/14/wcf-message-streaming.aspx

流很可能在客戶端上你最好的選擇,從緩衝transferMode的阻塞性質保持。我不知道數據有多大的具體細節,但如果你走了這條路線,你的服務在客戶端會表現得更好一些。在這裏可以找到一個很好的入門配置客戶端流媒體:http://systemmetaphor.blogspot.com/2009/05/using-wcf-to-transfer-large-data-files.html

希望上面的一些組合有助於

+0

使用WCF跟蹤,沒有任何用處顯示。提琴手是我發現最大字符串內容長度問題是問題的唯一原因。我只是猜測,但有關bindingElementExtensions的事情似乎相關,我只是找不到任何有關如何正確添加它的信息。 – 2010-10-07 12:27:20

+0

我在Google上發現的文檔中所突出的部分是和maxItemsInObjectGraph。前者是因爲默認情況下,ASP.NET對請求大小有限制,而後者對於」只有我改變了,似乎做了任何「類似的行爲 – 2010-10-07 13:21:30

+0

它看起來好像你在正確的方向,但你應該能夠跟蹤爲什麼應用程序失敗在ASP.NET中我只使用WCF自我託管的路線,我想說,這給了我更多的自由來確定這樣的奇怪的錯誤,而沒有像ASP.NET這樣的東西阻礙(不是它在大多數情況下根本就沒有) – 2010-10-07 13:23:17

0

您是否嘗試過的配置在服務中設置maxStringContentLength?在我的情況下,將其設置爲允許Silverlight客戶端使用maxStringContentLength所需的值。

需要注意的是,如果您允許較長的字符串,但不要調整maxReceivedMessageSize,否則可能會導致問題。 maxReceivedMessageSize確實需要在服務和客戶端上進行控制,因爲不會繼承其他值。

2

如果讀取XML數據的最大字符串內容長度配額(8192)已經被超過。」被忽略了你的web.config設置後,即使您設置 你也可以通過創建的實例解決在代碼中的問題XmlDictionaryReaderQuotas並設置MaxStringContentLength到2147483647

那麼作爲mycreatedreaderquota

XmlDictionaryReaderQuotas mycreatedreaderquota = new XmlDictionaryReaderQuotas(); 
     mycreatedreaderquota.MaxStringContentLength = 2147483647; 

     XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(stream, mycreatedreaderquota); 
相關問題