問題:
線上正式環境調用WCF服務正常,但是每次使用本地測試環境調用WCF服務時長就是出現:套接字連接已中止。這可能是由於處理消息時出錯或遠程主機超過接收超時或者潛在的網絡資源問題導致的。本地套接字超時是“00:05:30” 這個問題,查閱了網上很多資料各種說法的都有,有的說是什么請求站點不在同一個域下,有的說什么應為datatable中有一個屬性沒有賦值各種答非所問的問題。其實從錯誤信息中就可以看出來其實就是調用超時了。
解決方案:
在調用wcf的服務端的web.config中配置netTcpBinding這個配置,將receiveTimeout完成接收操作提供的時間間隔設置為:00:05:30即可解決(或者使用默認配置:00:10:00,不配置即可)。
這是我在我的服務端配置的相關參數(僅供大家參考),大家可以根據自己的需求配置:
<netTcpBinding> <!--binding:此元素包含標准綁定和自定義綁定的集合--> <binding portSharingEnabled="true" receiveTimeout="00:05:30" openTimeout="00:01:00" sendTimeout="00:01:00"> <!--定義綁定的安全設置,mode="None"禁用安全性--> <security mode="None"/> <!--定義可由采用此綁定配置的終結點進行處理的 SOAP 消息的復雜性約束--> <readerQuotas maxDepth="32" maxStringContentLength="65536000" maxArrayLength="65536000" maxBytesPerRead="4096" maxNameTableCharCount="16384"/> </binding> </netTcpBinding>
netTcpBinding配置說明
特性和元素
下列各節描述了特性、子元素和父元素。
特性
特性 | 說明 |
---|---|
closeTimeout |
一個 TimeSpan 值,指定為完成關閉操作提供的時間間隔。 此值應大於或等於 Zero。 默認值為 00:01:00。 |
hostNameComparisonMode |
指定用於分析 URI 的 HTTP 主機名比較模式。 此屬性的類型為 HostNameComparisonMode,指示在對 URI 進行匹配時,是否使用主機名來訪問服務。 默認值為 StrongWildcard,表示忽略匹配項中的主機名。 |
listenBacklog |
一個正整數,指定偵聽器上等待接受的最大通道數。 超出此限制的連接會被排隊,直到連接數低於限制值。 connectionTimeout 屬性限制客戶端在引發連接異常之前將等待連接的時間。 默認值為 10。 |
maxBufferPoolSize |
一個整數,指定此綁定的最大緩沖池大小。 默認值為 512 * 1024 字節。 Windows Communication Foundation (WCF) 的許多部件使用緩沖區。 每次使用緩沖區時,創建和銷毀它們都將占用大量資源,而緩沖區的垃圾回收過程也是如此。 利用緩沖池,可以從緩沖池中獲得緩沖區,使用緩沖區,然后在完成工作后將其返回給緩沖池。 這樣就避免了創建和銷毀緩沖區的系統開銷。 |
maxBufferSize |
一個正整數,指定內存中用於存儲消息的緩沖區的最大大小(字節)。 如果 transferMode 屬性等於 Buffered ,則此屬性應等於 maxReceivedMessageSize 屬性值。如果 transferMode 屬性等於 Streamed ,則此屬性不能大於 maxReceivedMessageSize 屬性值,應當至少為標頭的大小。默認值為 65536。 有關詳細信息,請參閱 MaxBufferSize。 |
maxConnections |
一個整數,指定服務將創建/接受的最大出站和入站連接數。 傳入和傳出連接分別根據此屬性指定的限制進行計數。 超出此限制的入站連接需要排隊,直到連接數低於限制值。 超出此限制的出站連接需要排隊,直到連接數低於限制值。 默認值為 10。 |
maxReceivedMessageSize |
一個正整數,指定采用此綁定配置的通道上可以接收的最大消息大小(字節),包括消息頭。 如果消息超出此限制,則發送方將收到 SOAP 錯誤。 接收方將刪除該消息,並在跟蹤日志中創建事件項。 默認值為 65536。 |
name |
一個包含綁定的配置名稱的字符串。 因為此值用作綁定的標識,所以它應該是唯一的。 從 .NET Framework 4 開始,綁定和行為不需要具有名稱。 有關默認配置和無值綁定和行為的詳細信息,請參閱WCF 服務的簡化配置和簡化配置。 |
openTimeout |
一個 TimeSpan 值,指定為完成打開操作提供的時間間隔。 此值應大於或等於 Zero。 默認值為 00:01:00。 |
portSharingEnabled |
一個布爾值,指定是否為此連接啟用 TCP 端口共享。 如果此值為 false ,則每個綁定都使用自己的獨占端口。 此設置只與服務相關,因為客戶端不受影響。 |
receiveTimeout |
一個 TimeSpan 值,指定為完成接收操作提供的時間間隔。 此值應大於或等於 Zero。 默認值為 00:10:00。 |
sendTimeout |
一個 TimeSpan 值,指定為完成發送操作提供的時間間隔。 此值應大於或等於 Zero。 默認值為 00:01:00。 |
transactionFlow |
一個布爾值,指定綁定是否支持流動 WS-Transactions。 默認為 false 。 |
transactionProtocol |
指定與此綁定一起使用的事務處理協議。 有效值為 -OleTransactions -WSAtomicTransactionOctober2004 默認值為 OleTransactions。 此屬性的類型為 TransactionProtocol。 |
transferMode |
一個 TransferMode 值,指定為請求或響應對消息進行緩沖處理還是流式處理。 |
子元素
元素 | 說明 |
---|---|
<security> | 定義綁定的安全設置。 此元素的類型為 NetTcpSecurityElement。 |
<readerQuotas> | 定義可由采用此綁定配置的終結點進行處理的 SOAP 消息的復雜性約束。 此元素的類型為 XmlDictionaryReaderQuotasElement。 |
<reliableSession> | 指定是否在通道終結點之間建立可靠會話。 |
父元素
元素 | 說明 |
---|---|
<bindings> | 此元素包含標准綁定和自定義綁定的集合。 |