2009-10-29 22 views
5

私は、3つの異なる2重WCFチャネルをホストするWindowsサービスを持っています。クライアントは接続して、コールバック契約によって更新を送信できます。本質的に、3つのpub-subチャンネルがある。WCF - クライアントが接続されているときに閉じると、CloseTimeout期間のServiceHostブロックを閉じます。

このサービスは、クライアントが接続されているとバウンスするのに時間がかかります。 ServiceHost.Closeの呼び出しには10秒かかります(サービスが停止するまでに30秒以上かかる)。config内のcloseTimeoutが10秒であることが判明しました。この値を変更すると、これが問題の原因であることが示されます。

チャンネルをすぐに閉じるにはどうすればよいですか?私は何かがタイムアウトしているという考えが好きではありません。私はAbortと呼ぶことができましたが、より良い方法があるはずです。私は前に非二重チャネルでこれを見たことがないので、二重であることとは何かを仮定します。

チャネルが障害を起こしたとすぐにクライアントに通知されることが理想的であり、ユーザーは直ちに更新が停止したことを知ることができます。

答えて

0

おそらく、最も良い方法はクライアントに通知することです(デュプレックスを使用できるので)、クライアントにチャネルを閉じることができます。

+1

これを試しましたか?チャンネルのもう一方の端が 'CloseTimeout'のためにブロックされないということは何ですか? –

+0

これは私がWCFを使用する方法であり、あなたのような問題は一度もありませんでした。一致しているかもしれない、そうでないかもしれない。私の経験を共有しました。 – adontz

1

"理想的には、チャネルに障害が発生したとすぐにクライアントに通知されるため、ユーザーは更新が停止したことをすぐに知ることができます。

  • 休館
  • フォルト発生
  • オープン
  • 開口部を閉鎖:

    WCFクライアントのインスタンスは、あなたが購読できるイベントがあります。

フォールト何らかの理由でデュプレックスチャネルが停止するとすぐにイベントが発生します。

あなたのサービスホストが30秒以上かかっているのはなぜですか?いくつかのサンプルコードを提供できますか?

+0

IIRCでは、チャネルは、実際に何かをしようとしたとき、またはハートビートを設定したときに障害が発生したことだけを検出します(この場合、まだ遅延があります)。 –

関連する問題