2016-11-16 5 views
0

現在、クライアントと消費するいくつかのWCFサービスを持つソフトウェアソリューションを開発中です。私たちが持っている問題は、WCFサービスが一定期間活動しなくなってからタイムアウトすることです。WCFタイムアウト処理

  1. 増加のタイムアウト(私の知る限り理解されるように、これは一般的に推奨されていない例えば、無限/週にタイムアウトを設定する悪い習慣と考えられている。。)
  2. :私の知る限り理解し、これを解決するには2通りの方法があります
  3. 定期的にクライアントからWCFサービスにpingを実行します(冗長な定期的な呼び出しを追加するので、私は彼の巨大なファンではないと確信しています)
  4. タイムアウトの問題を処理して再接続を試みます多くのマニュアルコード)
  5. 信頼できるセッション - これは組み込みWCFのpingとメッセージの信頼性メカニズムであると言われているソースもありますが、これはまだタイムアウトになることに言及する。

この問題を解決するには、どのような方法が推奨されますか?これに関する公式の読書資料はありますか?私はすべての情報を自分で見つけることができませんでした

ありがとう!

答えて

1

私が見ることができるように、述べたポイントの組み合わせを使用する必要があります。

  1. タイムアウトを増やすことは悪いことであり、多くの問題を引き起こす可能性があります。
  2. 信頼できるセッションを使用しない場合は、接続を保持するためにはPingが唯一適用されます。
  3. タイムアウトが発生しても、接続が失われても、例外がスローされても、このことは処理する必要があります。あなたの接続にはさまざまな可能性があります。
  4. 信頼性の高いセッションは、pingを実装しないのが良い方法ですが、技術的にはほぼ同じです。 WCFは自動的に「私はここにいる」という要求を送信します。

最後にポイント3とポイント2または4が必要です。ポイント3の手動コードを減らすには、プロキシまたはServiceClientのラッパーを使用して、古いものはリクエスト中にフォールトされます。ポイント4は実装するのが簡単です。なぜなら、あなたの設定であなたのバインディングにいくつかの小さな追加が必要なだけなのでです。そして、トラフィックのオーバーヘッドはそれほど大きくはありません。ポイント2は最も高価な方法です。サーバーにpingを実行し、サービスを拡張する必要があるスレッド/タスクを処理する必要があります。しかし、あなたが前に述べたように、信頼できるセッションは失敗する可能性があり、Pingはあなたを安全な側に導くべきです。

+0

あなたの意見を共有してくれてありがとう:)あなたはWCFで多くの経験がありましたか?あなたは同様のパターンを実装することになりましたか? – Ross

+1

@Rossはい、私たちは、カップルの社内プロジェクトのベースとしてwcfに動的なデュプレックスサービスを書いています。私の答えは、過去3年間のwcfでの私の経験を反映しています。私たちはポイント3と4を実装しましたが、信頼性の高いセッションは信頼できるセッションではありません;)Pingを実装して以来、すべてが完璧に動作します。 – Rabban

+0

よろしくお願いします!あなたの経験を共有してくれてありがとう:) – Ross

1

あなたのWCFエンドポイントは何をしているのですか?あなたのコマンド設定を最適にする方法はありますか? おそらく、エンドポイントのアクションの結果を待つのではなく、クイック・クエリーを可能にするポーリング・システムに基づいて長い時間を要するエンドポイントを持つ方がよいでしょう。 また、考えられる問題としてデータ転送も考慮する必要があります。転送しているデータの量が多いのですか?

もっと具体的な回答を得るには、特定のエンドポイントとそのサービスに関する他の責任についてもっと知る必要があります。

+0

さまざまな目的のために、いくつかの異なるWCFサービスがあります。シンプレックスとデュプレックスがあります。それらのすべてが迅速な操作を実行します(最大で数秒、大多数ははるかに高速です)。問題は間欠的に使用されることが多いため、サービスを継続したいと思っているサービスへのリクエストに時間がかかることがあり、毎回スピンアップする必要がないため、遅延が発生する可能性があります。 – Ross

+0

2つのプロセスの実行中に問題を起こすべきではありません。しばらくして呼び出しを呼び出そうとすると、2つのプロセス間の接続を再確立しようとしましたか? –

+0

誤って「入力」を押します。 サービスコマンドごとに接続を再確立すると、接続に問題が発生しやすくなります。 プログラムは、要求に応じてエンドポイントコマンドに応答できるように、実行中のループを持つ必要があります。毎回プロセスを起動する必要はありません。 なぜ彼らは降りていますか?タイムアウトが原因であれば、サービス間で長すぎるコマンドを実行することに問題があります。 –

関連する問題