如果我运行以下代码,它试图在未应答的端点上获取HTTPS URL(注意端口);然后它会在第二次传递时抛出超时WebException,正如我所料:
var request = WebRequest.CreateHttp("https://stackoverflow.com:81");
request.Timeout = 1000; // ms
Stopwatch watch = Stopwatch.StartNew();
try
{
using(var response = request.GetResponse())
{
new StreamReader(response.GetResponseStream()).ReadToEnd();
}
}
catch(Exception ex)
{
Console.WriteLine(ex);
}
watch.Stop();
Console.WriteLine(watch.Elapsed);
现在,如果我通过代理连接(例如,通过打开Fiddler),则不会超时,并且仅在21秒(!)之后发生异常。我怀疑超时是特定于代理的(当我尝试通过我们内部的另一个代理进行连接时,实际持续时间会更长。)
为什么会这样?是HttpWebRequest中的错误吗?
有没有办法解决这个问题(最好不要设置我自己的计时器线程来强制执行超时)?