[英]WCF Exception for long operations: netTcpBinding
我們在服務中具有以下netTcpBinding。 在一種特定的情況下,我們有一個龐大的數據庫操作,大約需要35分鍾才能完成。 我收到“套接字連接已中止”異常。 為了避免異常,我應該更改哪些設置?
注意:大約10分鍾后,我得到了例外。 默認值為10分鍾的配置值是什么?
框架:.Net 3.0
更新 :當我應用了receiveTimeout =“ 00:30:00”時,現在說了大約5分鍾后,以下IE錯誤“系統無法與外部服務器通信”。
在應用它之前,它曾經是我們應用程序的自定義錯誤頁面。 知道我現在應該更改什么嗎?
注意:這是在登台服務器中發生的。 (該問題在我們的開發環境中之前和之后均不可用)
注意:對於暫存,Web應用程序托管在IIS中。 WCF托管在Windows服務中
<bindings>
<netTcpBinding>
<binding name="AdministrationBinding" maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="32"
maxStringContentLength="2147483647"
maxArrayLength="2147483647"
maxBytesPerRead="2147483647"
maxNameTableCharCount="16384"/>
</binding>
</netTcpBinding>
</bindings>
相應的客戶端配置如下:
<binding name="NetTcpBinding_IAdministrationManager"
closeTimeout="00:30:00"
openTimeout="00:30:00"
receiveTimeout="00:30:00" sendTimeout="00:30:00"
transactionFlow="false" transferMode="Buffered"
transactionProtocol="OleTransactions"
hostNameComparisonMode="StrongWildcard"
listenBacklog="10"
maxBufferPoolSize="524288"
maxBufferSize="2147483647"
maxConnections="10"
maxReceivedMessageSize="2147483647">
<readerQuotas maxDepth="32"
maxStringContentLength="2147483647"
maxArrayLength="16384" maxBytesPerRead="4096"
maxNameTableCharCount="16384"/>
<reliableSession ordered="true"
inactivityTimeout="00:30:00" enabled="false"/>
<security mode="Transport">
<transport clientCredentialType="Windows"
protectionLevel="EncryptAndSign"/>
<message clientCredentialType="Windows"/>
</security>
</binding>
謝謝
Lijo
您還需要在服務器端為各種超時添加非默認值。 從技術上講,並非所有超時都對雙方都有效/有用(發送與接收,打開與關閉),但為使事情簡單,您可以在任一端進行鏡像。
盡管您可以增加超時來停止此異常,但是長時間的超時可能會導致其他問題,導致客戶端等待年齡,如果有問題,則拋出錯誤。
我認為讓長時間操作在服務器上異步發生並讓該方法立即返回可能會更好。 如果需要在操作完成的客戶端通知,則可以使用回調。
服務中的receiveTimeout默認為10分鍾-這是服務在確定代理消失之前將等待請求的時間。 您將需要增加它。 但是,您是否要進行35分鍾的同步通話?
對於這種情況,我將異步運行所有內容,或者讓客戶端定期檢查是否完成,或者使用雙工消息傳遞,因此服務在操作完成時會通知客戶端
無論發生什么情況,客戶端都需要比該服務更頻繁地與該服務進行對話,否則該服務將終止連接-實際上,如果您使用雙工,則該服務需要更頻繁地與該客戶端進行對話,而同一個客戶端的receiveTimeout原因
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.