2009-06-10 70 views
3

我有一個會話的WCF服務,它產生一個進程並在調用IsInitiating操作時打開一個到這個進程的命名管道。當調用IsTerminating操作時,服務沿管道發送消息以通知另一端的進程它可以關閉。不幸的是,如果客戶端沒有正常斷開連接(通過調用IsTerminating操作),那麼該消息絕不會發送到管道,而另一個進程永遠不會退出。突然WCF的資源清理會話服務斷開連接

我試着讓我的服務實現IDisposable(希望當會話超時在服務器上它會調用我的Dispose方法),但這似乎不起作用。

當客戶端斷開連接時(即使我必須等待一個非活動時間),有什麼辦法可以在服務器端調用一些代碼?

+0

我不能得到IDisposable工作要麼 - 發現兩個人聲稱它的作品雖然... – Schneider 2010-06-10 14:56:34

回答

0

與IDisposable的想法應該工作。設置您的實例上下文模式,如:

從MSDN:http://msdn.microsoft.com/en-us/magazine/cc163590.aspx

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] 類爲MyService:IMyContract {...}

會議通常終止時,客戶端關閉代理,通知服務會話已結束。如果服務支持IDisposable,則將調用Dispose方法。圖4顯示了一個合約和服務配置爲使用私人會話及其客戶端。從輸出中可以看到,客戶端獲得了一個專用實例。