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 秒 (場合によってはそれ以上) になります。