1

SOAP 経由で Web サービスを呼び出しています。Web サービスがダウンした場合、デフォルトのタイムアウトを待つのではなく、すぐに失敗するようにしたいと考えています。これには Timeout プロパティを使用します。

service.Timeout = 5000;

5秒後に操作をタイムアウトする必要があると思います。ただし、操作は 23 秒後までタイムアウトしないことがわかります。これは、デフォルトのタイムアウトと同じ時間です (つまり、上記の行は存在しません)。

スローされた例外が「操作がタイムアウトしました」であることがわかります。指定した時間内にタイムアウトしない理由がわかりません。私は何を間違っていますか?

編集:

テストプログラムは次のとおりです。

long start = Environment.TickCount;
try {
  mdDqwsStatus.Service service = new mdDqwsStatus.Service();
  service.Timeout = 5000;                                        // 5 sec
  string response = service.GetServiceStatus(customerID, pafID); // This calls the WS
  long end1 = Environment.TickCount - start;                     // I never hit this line
} catch (Exception ex) {
  long end2 = Environment.TickCount - start;                     // Failure goes to here
  OutputError(Ex);
}

OutputError 行にブレークポイントを設定し、end2 を確認すると、23000 ミリ秒以上あります。

現場では、Web サービス (IIS で実行される) が停止している場合、遅延は非常に短いことに注意してください。ただし、マシンがダウンしているか、接続に問題がある場合、遅延は 23 秒 (場合によってはそれ以上) になります。

4

0 に答える 0