WCF 傳遞數據量大時的報錯處理

1、報錯信息
(1)接收對 http://xxx.svc 的 HTTP 響應時發生錯誤。這多是因爲服務終結點綁定未使用 HTTP 協議形成的。
    這還多是因爲服務器停止了 HTTP 請求上下文(可能因爲服務關閉)所致。有關詳細信息,請參閱服務器日誌。服務器

(2)格式化程序嘗試對消息反序列化時引起異常: 嘗試對參數 http://tempuri.org/ 進行反序列化時出錯: SearchResult。InnerException 消息是「對象圖中能夠序列化或反序列  化的項目數目上限爲「65536」。請更改對象圖或增長 MaxItemsInObjectGraph 的配額。 」。有關詳細信息,請參閱 InnerException。ui

(3) 超過59秒的報錯提示spa

2、解決方案日誌

1.服務端 解決報錯(1)
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior> 節點下增長以下配置節點對象

<dataContractSerializer maxItemsInObjectGraph="2147483647" />utf-8


2.客戶端 解決報錯(2)
<system.serviceModel>下增長以下配置節點
<behaviors>
<endpointBehaviors>
<behavior >
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
</behavior>
</endpointBehaviors>
</behaviors>it

 

3.超時報錯處理。如下配置中默認爲00:01:00 即1分鐘。數據量大是超過59秒會報錯。所以改成10分鐘
closeTimeout="00:10:00" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"io

客戶端完整配置:cli

<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_IServiceDataSync" closeTimeout="00:10:00"
openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00"
allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647"
maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://192.168.0.230/WcfDataSync/ServiceDataSync.svc"
binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IServiceDataSync"
contract="ServiceDataSync.IServiceDataSync" name="BasicHttpBinding_IServiceDataSync" />
</client>配置

<behaviors>
<endpointBehaviors>
<behavior >
<dataContractSerializer maxItemsInObjectGraph="2147483647" />
</behavior>
</endpointBehaviors>
</behaviors>

</system.serviceModel>

相關文章
相關標籤/搜索