C# 未遵守HttpWebRequest超时

C# 未遵守HttpWebRequest超时,c#,asp.net,timeout,httpwebrequest,C#,Asp.net,Timeout,Httpwebrequest,我已设置以下web请求: HttpWebRequest request = (HttpWebRequest) WebRequest.Create(gotoWebinerUrl); request.Accept = "text/json"; request.Timeout = 5000; // Allows us to track with Fiddler, for dev use only request.Proxy = new WebProxy("127.0.0.1", 8888); tr

我已设置以下web请求:

HttpWebRequest request = (HttpWebRequest) WebRequest.Create(gotoWebinerUrl);
request.Accept = "text/json";
request.Timeout = 5000;

// Allows us to track with Fiddler, for dev use only
request.Proxy = new WebProxy("127.0.0.1", 8888);

try
{
    WebResponse response = request.GetResponse();
    Stream responseStream = response.GetResponseStream();
    ...
}
catch (Exception exception)
{
    ...
}
在Fiddler中,我安装了这个插件来延迟请求。使用该插件,我添加了一条规则,将网络研讨会请求URL延迟60000ms(1分钟)

我希望我的应用程序延迟5秒,失败并被异常捕获。但是,它会延迟整整60秒

我不确定这是插件问题还是我的应用程序问题,但我怀疑是后者。在60秒的延迟时间内,我可以导航到其他网页并在Fiddler中查看请求,因此我不认为插件存在问题

我发现了几个类似的问题(),但我不太熟悉线程以及它们是否适用于这里

其他信息


通过对代码进行进一步的研究,我发现了一些有趣的行为。
GetResponse
被成功触发,我在Fiddler中看到了请求。然后我有60秒的等待时间。然而,当我可以继续单步执行时,我注意到它已被捕获为
TimeoutException
,尽管它实际上已经等待了整整60秒并收到了成功的响应。这确实表明插件中可能有什么东西在某种程度上愚弄应用程序,使其保持不变。

我知道这是一个老问题,但我的第一个想法是不使用Fiddler插件,而可能在web服务器上暂停实际的web响应。例如,在ASP.net代码中,您可以抛出一个
Thread.Sleep(60000)
调用。这样,您的人工暂停是在web响应的实际生成中,而不是在某个中间人代理服务器中,或者更糟糕的是,在中间人代理服务器的插件中。我认为你在这里有太多的变数来完成你想要做的事情。正如我所说的那样,这样做可以让我们更接近现实世界中的实际情况。