1
var strURL = "http://999.999.999.999"; // invalid IP-address
System.Net.WebResponse objResponse = default(System.Net.WebResponse);
System.Net.WebRequest objRequest = default(System.Net.WebRequest);

objRequest = System.Net.HttpWebRequest.Create(strURL);
objRequest.Timeout = 100;
objResponse = objRequest.GetResponse();

System.IO.StreamReader sr = new System.IO.StreamReader(objResponse.GetResponseStream());
result = sr.ReadToEnd();

firebug で見たタイムアウトは 3000 ミリ秒です...そんなはずはありません!

4

3 に答える 3

2

問題は、無効な IP アドレスのリクエスト前の解決にあります。すべての通常のリクエストは正常にタイムアウトします。MSDN によると:

ドメイン ネーム システム (DNS) クエリは、返されるかタイムアウトするまでに最大 15 秒かかる場合があります。リクエストに解決が必要なホスト名が含まれており、Timeout を 15 秒未満の値に設定した場合、リクエストのタイムアウトを示すために WebException がスローされるまでに 15 秒以上かかる場合があります。

確かに、'999.999.999.999' は DNS ルックアップを必要としませんが、Request オブジェクトが混乱し、解決に時間がかかっているに違いありません。IP が有効な URL に変更された場合:

var strURL = "http://www.myjunkinvalidurl.com"; 

または有効で機能している IP:

var strURL = "http://134.170.188.221"; // microsoft.com

または有効で機能していない IP:

var strURL = "http://123.123.123.123"; 

すべて約 115 ミリ秒 (100 ミリ秒のタイムアウト) 以内に戻ってくるので、WebRequest の無効な IP アドレス解決に問題があるはずです。IPを有効にしておけば問題ありません。

于 2014-05-21T03:17:47.537 に答える
-2

http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.timeout.aspxによると、リクエストがタイムアウトするまでのミリ秒数。デフォルト値は 100,000 ミリ秒 (100 秒) です。

于 2012-08-30T16:40:42.237 に答える