11

私はクライアントサーバーシステムを持っており、両側が私によって書かれており、サーバーが切断/停止したときにクライアントを「オフライン」状態にし、サーバーが再び利用可能になったときに自動的に「オンライン」に戻したいと考えています。 .

最初の部分では、チャネル障害イベントをリッスンし、クライアントをオフラインに設定して処理します。次に、サーバー上で 'ping' サービスの呼び出しを開始します (30 秒ごと)。クライアントが有効になると、クライアントは bool を取得し、オンラインに戻ります。

これはすべて機能します。私が抱えている問題は、クライアントが ping サービスを呼び出してサーバーがダウンしている場合、(明らかに) 応答が送信されず、最終的に約 2 分後にエンドポイントが見つからないという例外が発生することです。この時点で、すでに 3 ~ 4 回の ping を試しているため、3 ~ 4 個の例外が発生しています。

私の質問は、ping サービスをより適切に処理するにはどうすればよいかということです。理想的には、オンラインかどうかを知らせてくれるサービスを定期的に呼び出し、オンラインでないかどうかを即座に知らせてくれるサービスを利用したいと考えています。

4

1 に答える 1

12

これはどうですか:

  • サーバーの切断を検出した場合は、「Ping」モードに入ります
  • 「ping モード」では、クライアントの「sendTimeout」を非常に短い値 (たとえば 2 秒程度) に設定します。これは、サービスの Ping メソッドへの呼び出しにほぼ即座に応答する必要があるためです。
  • 「Ping」が正常に機能したら、再度クライアント プロキシを再作成し、クライアントの「sendTimeout」を元の値に戻します (デフォルトは 1 分です。15 秒、30 秒など、何が意味があるかによって異なります)。

そうすれば、「Ping モード」にある場合、応答 (またはタイムアウト) をすばやく取得し、サービスの可用性をすばやく検出できます。

于 2009-08-05T18:09:29.957 に答える