none
WCFサービスへのリクエストが、タイムアウト前に再送される RRS feed

  • 質問

  • WCFサービスアプリケーションを作成し、HTTPSで「信頼できるセッション(reliableSession)」を用いて接続できるように設定しております。
    次にクライアントプログラムをWPFで作成し、上記WCFサービスへのサービス参照を作成して通信を行っています。基本的にはそれで通信できているのですが、サーバ側の応答に時間がかかる場合、タイムアウト時間(1分間に設定しております)を待たずに同じリクエストを再送しているようなのです。
    Fiddler4で確認したのですが、サーバへ要求を投げてから応答もなく、タイムアウト時間にもなっていない時にもう一度同じ要求を投げています。またしばらく同じ状況が続くともう一度要求が投げられる、というようなことが繰り返され、最初の要求から1分後に、それらの要求がほぼ同時にタイムアウトとなります。
    クライアントプログラム自体には、特にタイムアウト時に同じ要求を繰り返すようなコードは組んでおりません。再送が起こる間隔は、3秒程度から20秒以上とばらつきがあります。
    渡す引数によってサーバの応答時間に開きがあるようなメソッドを呼び出した際は、応答時間が短いときにはこの現象は起こらず、応答時間が長いとこの現象が起きてしまいます。

    この現象を回避することは可能でしょうか? もしこの再送のたびに、WCFサービスの処理がされているならサーバの負荷増大の原因になるので回避したいのですが。

    WCFサービスの処理内(*.svc.csのメソッド内)にログ出力を仕込んで検証したところ、再送が起こってもWCFサービスの処理は一回しか実行されていないように見えました。何度も同じ処理がサーバ側で発生しないという確証があれば、無理にこの現象を回避しなくても良いとは考えているのですが、確証が持てないので回避できるものなら回避したいと考えています。
    2015年4月10日 0:58

回答

すべての返信

  • まったくはずしているかもしれませんが、信頼できるセッションは何らかの方法で信頼性を確保しているはずですので、実は内部ではリクエストを分割送信しているとか、何かそういう理由があったりしないですかね?

    ※まったく未確認です、信頼できるセッションの詳細を調べれば何かわかりそうな気がしますが

    2015年4月10日 1:03
  • https://msdn.microsoft.com/ja-jp/library/aa480191.aspx?f=255&MSPPError=-2147217396#EEAA

    この辺ですかね。

    確認応答がHTTPのレスポンスに載ってくるので、時間がかかる処理では再送が行われる可能性が高そうな感じですかね。

    再送の時間は複雑なアルゴリズムによる自動制御で、変更などはできないようです。

    --追記

    もちろん既に処理されている再送分はサーバ側できちんと制御されますので、処理が2度起動したりということはありません。

    • 編集済み なちゃ 2015年4月10日 1:46
    • 回答としてマーク yumekix 2015年4月10日 1:59
    2015年4月10日 1:14
  • URL拝見しました。確かに確認通知の可能性が高そうですね。

    ありがとうございます。

    どちらにしてもログを見る限り処理は1度しか実行されていないようですので、気にしないこととします。

    2015年4月10日 1:59