2009-06-10 6 views
3

私はプロセスを生成し、IsInitiating操作が呼び出されたときにこのプロセスに名前付きパイプを開くセッションフルなWCFサービスを持っています。 IsTerminating操作が呼び出されると、サービスはパイプを介してメッセージを送信して、シャットダウン可能なプロセスの終了をプロセスに通知します。残念ながら、クライアントが(IsTerminating操作を呼び出すことによって)正常に切断されない場合、メッセージはパイプに送られず、他のプロセスは決して終了しません。突然のWCFでのリソースクリーンアップセッションのサービス切断

サービスがIDisposableを実装しようとしましたが(サーバーでセッションがタイムアウトしたときにDisposeメソッドが呼び出されることを期待しています)、これは機能していないようです。

クライアントが切断されたとき(たとえ私がinactivityTimeoutを待たなければならない場合でも)サーバー側でいくつかのコードを呼び出すことができる方法はありますか?

+0

IDisposableは動作しません - 2人が動作していると主張しました... – Schneider

+0

私はカスタムIInstanceProviderを使用していました。その場合は、ReleaseInstance呼び出し中に手動でDisposeを呼び出す必要があります。ファイナライズは起こりません。インスタンスはリサイクルされているので、必ずしもGC'dとは限りません。 – Schneider

答えて

0

IDisposableのアイデアはうまくいくはずです。 MSDNから

:あなたのインスタンスコンテキストモードは次のように設定しhttp://msdn.microsoft.com/en-us/magazine/cc163590.aspx

[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerSession)] クラスMyServiceで:IMyContract {...}

セッションは、通常時にクライアントに終了しますプロキシを閉じて、セッションが終了したことをサービスに通知します。サービスがIDisposableをサポートしている場合、Disposeメソッドが呼び出されます。図4は、プライベートセッションとそのクライアントを使用するように構成された契約とサービスを示しています。出力からわかるように、クライアントは専用インスタンスを取得しています。

関連する問題