2台のPCでWCFを使ってネットワーク通信する際、リモートサーバー上でメソッドを実行しているのですが、操作にかかる時間が不明で、1秒から1日以上かかることもあるので、((IClientChannel)pipeProxy).OperationTimeout
プロパティを設定したいです。高い値にしますが、接続が常にアクティブであるため、これが正しい方法ですか、それともプログラミングの汚い方法ですか(すべて比較的安定したLANネットワーク上にあります)。
質問する
152 次
1 に答える
3
私はそんなことはしません。このような長いタイムアウトは、問題を引き起こす可能性があります。
操作を 2 つに分割します。操作を開始するクライアントからサーバーへの 1 つの呼び出しと、操作が完了したことを伝えるためのサーバーからクライアントへのコールバックです。もちろん、コールバックには結果情報 (成功、失敗など) が含まれます。
このように長い時間がかかるものについては、クライアントが定期的にサーバーを呼び出してサーバーがまだ応答していることを確認する「キープアライブ」メカニズムを導入することもできます。
タイムアウトが非常に長い場合、実際に何か問題が発生したかどうかを知るのが難しくなります。しかし、操作を 2 つに分割すると、キープアライブ (より正確には、「生きていますか?」) スタイルのメッセージで時々ポーリングしない限り、何か問題が発生したかどうかを知ることができなくなります。
別の方法として、進行状況メッセージを使用して時々サーバーにコールバックさせることもできますが、これはクライアントにサーバーを時々ポーリングさせるよりも管理が少し難しくなります (サーバーが最後にコールバックした時間を追跡して、サーバーが応答を停止しました)。
于 2013-07-04T06:30:52.170 に答える