2011-09-19 60 views
8

我已經看到了這個問題發佈了百萬次,但沒有任何解決方案都爲我工作...所以我來到這裏:問題與WCF的大型請求

當調用WCF服務我得到以下錯誤:

The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://BlanketImportService.ServiceContracts/2011/06:request . The InnerException message was 'There was an error deserializing the object of type BlanketImport.BlanketImportRequest. The maximum array length quota (16384) has been exceeded while reading XML data. This quota may be increased by changing the MaxArrayLength property on the XmlDictionaryReaderQuotas object used when creating the XML reader. Line 1, position 44440.'. Please see InnerException for more details.

我已經在客戶端服務器上修改的readerQuotas,並應用了bindingConfiguration標籤。

這裏的服務器配置:

<bindings> 
    <basicHttpBinding> 
    <binding name="BilagImportBinding" maxBufferSize="2147483647" 
     maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"> 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
     maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
    </binding> 
    </basicHttpBinding> 
</bindings> 

<services> 
    <service name="BlanketImport"> 
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="BilagImportBinding" bindingNamespace="http://BlanketImportService.ServiceContracts/2011/06" contract="BlanketImport.IBlanketImport"> 
    </endpoint> 
    </service> 
</services> 

而且客戶端配置:

<bindings> 
    <basicHttpBinding> 
     <binding name="BilagImportBinding" maxBufferSize="2147483647" 
     maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"> 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
      maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
     </binding> 
    </basicHttpBinding> 
    </bindings> 
    <client> 
    <endpoint address="http://localhost/BlanketImport/BlanketService.svc" 
     binding="basicHttpBinding" bindingConfiguration="BilagImportBinding" contract="BlanketServiceReference.IBlanketService" 
     name="BasicHttpBinding_IBlanketService" /> 
    </client> 
+0

服務名稱是「BlanketImport」,還是位於命名空間下(如BlanketImport.BlanketImport)? 「」元素的「name」屬性的值必須是服務的名稱*名稱空間+類型名稱,否則WCF將無法找到它。 – carlosfigueira

+0

這是2015年,wcf配置設置仍然是我們大多數人的一個謎團。 – abhi

回答

18

找到了解決辦法...不過還是很奇怪!

如果我從我的綁定標記中刪除名稱屬性,並從我的端點標記中除去bindingConfiguration屬性,它將全部有效。這意味着basicHttpBinding配置是所有basicHttpBinding端點的默認配置

+1

太好了 - 如果您將自己的答案標記爲解決方案,您將獲得徽章。 :) – Lars

+0

感謝您的解決方案! WCF配置過於複雜 –

+0

我花了3天時間研究相同的問題,直到找到解決方案。謝謝!!! – Copeleto

2

我嘗試使用WCF使用命名綁定配置上傳文件時遇到了同樣的問題。這與在WCF 4.0和「簡化」配置的變化做(見MSDN

FYI:我想盡一切辦法解決這個問題;該服務的參數是一個字節數組,因此我們移除了它並使用了一個流,試圖改變緩衝模式與流模式,顯然有150萬個配置選項用來更改從未使用命名配置獲取的大小。

確實非常奇怪,但與您的建議。

+0

爲鏈接+1 –

0

我有一個類似的問題,其中指定的綁定未被端點使用。我的問題是服務名稱中的拼寫錯誤。就像Livewire所說的那樣,WCF 4簡化配置會自動創建一個端點,我定義的端點不會覆蓋它。