2009-08-24 7 views
1

nettcpとDuplexコールバックを使用して、WCFでパブリッシュ/サブスクライブシナリオを作成しています。私はサービスに加入している多くのクライアントを持っていますが、これは問題なく動作します。ただし、クライアントが切断されずに閉じられることがあります(クライアントコンピュータがスリープ状態になる、コンピュータがクラッシュする、ネットワーク接続が中止されるなど)、コールバックリスト経由でコールバックすると例外がスローされます。WCFデュプレックスセッションが途中で終了した場合の通知方法

ここで、私は確かに例外を捕捉して問題のコールバックを取り除くことができますが、これは私にとって例外的なシナリオのようには思えず、さらに「期待される動作」の行に沿っているようです。

私のリストからコールバックを削除できるように私に通知する接続クローズで発生するイベントがありますか?これがHTTPではなくnet.tcpであることを考慮して、接続状態を把握する必要があります。

明らかに、フレームワークは、「廃棄オブジェクトを呼び出そうとしました」という行に例外があるため、接続が閉じられて処理されていることが分かります。

EDIT:

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

+0

私はあなたのクライアントコンピュータがスリープ状態にすることが可能であるならば、あなたのWCFの会話の期間が何であるか興味があります。私はまさにWCFに精通しています。私が知っていることから、あなたが直面しているまさにその理由のために、二重サービスは長時間実行される永続的なトランザクションには使用されませんでした。 – jrista

+1

「何のために設計されたもの」とよく使われるものは、しばしば全く異なっています。私は接続を生かし続けるためにハートビートメッセージを利用する、長時間実行する接続が必要です。 WCFは長期間接続するための他のオプションを提供しないので、私はこれで期限を迎えるか、またはWCFを使用しないように私のアプリケーションを書き直さなければなりません。 –

答えて

3

私は間違っている可能性があるので、これはメモリからのものですが、DispatchRuntimeでポークしてIInputSessionShutdownを追加するIEndpointBehaviorを作成すると、セッションチャネル終了する。

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

+1

有望に見える...私は実験して、これがどこに行くのか –

+0

これはあなたのためにできましたか?私は例外をキャッチして、クライアントを削除しています。 – DennyFerra

関連する問題