1

net.tcpおよびDuplexコールバックを使用したWCFでのパブリッシュ/サブスクライブシナリオがあります。サービスに加入しているクライアントがたくさんありますが、これは問題なく機能します。ただし、サブスクライブを解除せずにクライアントが閉じる場合があります(クライアントコンピューターがスリープ状態になる、コンピューターがクラッシュする、ネットワーク接続が中止されるなど)。これにより、コールバックリストを介してコールバックすると例外がスローされます。

これで、例外を確実にキャッチして、問題のあるコールバックを削除できますが、これは私にとっては例外シナリオのようではなく、さらに「予期される動作」に沿ったもののようです。

リストからコールバックを削除できるように通知する接続の終了時に発生するイベントはありますか?これはHTTPではなくnet.tcpであるため、接続状態を知る必要があると考えてください。

明らかに、フレームワークは接続が閉じられて破棄されたことを認識しています。これは、例外が「破棄されたオブジェクトを呼び出そうとする」という方針に沿ったものであるためです。

編集:

これは長期にわたるトランザクションではないことを指摘しておく必要があります。これは、パブリッシュ/サブスクライブのシナリオでは長時間実行される接続です。基本的に、コールバックは、一時的なサブスクライバーにさまざまなイベントが発生したときに通知するために使用されます。各イベントは分離されており、長時間実行されません。

4

1 に答える 1

3

しばらく経ちましたが、これはメモリからのものであるため、間違っている可能性がありますが、DispatchRuntimeで突くIEndpointBehaviorを作成してIInputSessionShutdownを追加すると、セッションチャネルが終了したときに通知を受け取ることができると思います。

http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.dispatchruntime.inputsessionshutdownhandlers.aspx

于 2009-08-24T04:15:25.853 に答える