1

ServerXMLHTTP オブジェクトを使用して HTTPS の「GET」リクエストを送信する際の「タイムアウト」に関する質問があります。

ログインしたユーザーの ID とパスワードを使用してリクエストを送信するようにオブジェクトを欺くために、ダミーのプロキシを使用するように設定し、URL のドメイン (イントラネット上) を除外しました。したがって、変数 url_to_get には .mydomain.com が含まれますが、プロキシ アドレスは実際には「not.used.com」です。

// JScript source code
HTTP_RequestObject = new ActiveXObject("Msxml2.ServerXMLHTTP.6.0");

// Using logged in username authentication
HTTP_RequestObject.open("GET", url_to_get, false);
HTTP_RequestObject.setProxy(2, "not.used.com", "*.mydomain.com");

try
{
   HTTP_RequestObject.send();
}
catch (e)
{
}

catch ブロックで、「(0x80072EE2) The operation timed out」という例外をログに記録します。これは、開く直前のログ メッセージの 1 ~ 2 秒後にタイムスタンプが付けられます。

再試行は期待どおりに機能し、何度でも実行できます。これはサーバー側のものですか?それともプロキシの結果ですか?

4

2 に答える 2

0

うーん、これは苦しくて恥ずかしかった。タイムアウトで発生していた問題の根本原因を突き止めました。タイムアウトを「デフォルト」に設定しましたが、これは実際のデフォルトよりも 3 桁小さいものでした。そのため、非常に大きな値であると思われる値までそれらを増やしたとしても、それでもデフォルトよりも短かった.

setTimouts() メソッドを説明している Microsoft ページの文言をざっと読んで、パラメーターのタイムベースを誤解していました。実際にはミリ秒でしたが、秒を想定しました。

この問題をデバッグする過程で、別の COM オブジェクト "WinHttp.WinHttpRequest.5.1" を使用してコードを複製し、同等の API であるSetTimeouts()を検証したところ、問題が発見されました。

その過程でいくつかのことを学んだので、すべてが失われるわけではありません。「WinHttp.WinHttpRequest.5.1」には SetAutoLogonPolicy() [3] メソッドがあり、「Msxml2.ServerXMLHTTP. 6.0" を使用して、ユーザーの資格情報をイントラネット サーバーに強制的に送信します。私も Fiddler [4] をいじって、危険なことを十分に学びました!

他の誰かが私の過ちから学び、将来自分の問題をデバッグするのに役立つことを願っています.

2つ以上を投稿するのに十分な担当者がいないため、ここにいくつかのインラインリンクがあります:

[3] : msdn.microsoft.com/en-us/library/windows/desktop/aa384050%28v=vs.85%29.aspx

[4] : fiddler2.com

于 2014-01-19T10:06:27.023 に答える