2014-01-28 90 views
1

我想知道什麼是處理WCF服務中的超時的正確方法。在WCF服務中處理超時

我有一個使用會話的服務。客戶端執行Connect,各種調用(用戶與客戶端應用程序交互),然後在某個時刻執行Disconnect。 Disconnect操作在服務器上執行清理(例如釋放COM對象)。但是,客戶端可能(異常)終止(出於各種原因)而不調用斷開連接。 receiveTimeout過期後,服務會中止。我需要以某種方式處理這個問題,以便我能夠妥善清理會議。我怎樣才能做到這一點?

是否有我能處理的事件?一個我可以用它來實現和定製服務的接口?我看了,但沒有發現什麼。 IErrorHandler不幫助超時。

我想到了服務上的定時器,每次調用服務時都會重置該定時器。當計時器過去時,客戶端被認爲是斷開的,服務可以清理會話。這是否合適? (此間隔應始終小於綁定的receiveTimeout。)

回答

1

根據http://msdn.microsoft.com/en-us/library/ff183865.aspx,WCF會話在10分鐘後默認超時或receiveTimeout指定的任何內容。如果你的服務類實現了IDisposable,我相信Dispose()調用應該在這個時候進入,這會給你第二個/最後一次清理任何未完成資源的機會。

+0

這的確有竅門。謝謝。 –