gpt4 book ai didi

c# - HttpWebRequest,像 Fiddler 一样保持事件状态?

转载 作者:行者123 更新时间:2023-11-30 13:01:24 25 4
gpt4 key购买 nike

使用 HttpWebRequest,我正在尝试以循环模式(两个 IIS 7.5 服务器)查询负载平衡设置背后的安全(协商)URL。看起来很简单,但我遇到了一些问题。

第一个匿名请求在一台服务器上进行,协商部分在另一台服务器上进行。问题是这两个请求之间大约需要 6 秒,所以时间太长了。在尝试诊断延迟时,我意识到,通过 Fiddler 的代理,所有请求都在同一台服务器上进行,因此总共花费了不到一秒的时间。如果我禁用 Fiddler 选项“重用服务器连接”,那么我的请求与没有 Fiddler 时的行为相同,并且需要永远。

谷歌搜索,我最终找到了这个链接:http://fiddler2.com/blog/blog/2013/02/28/help!-running-fiddler-fixes-my-app-

我知道 Fiddler 使用套接字和它自己的连接池,但是有没有办法使用 .NET HttpWebRequest 重现相同的行为,以便我的请求(匿名和协商)将重用连接并最终在同一台服务器上结束?

这是一个快速测试,在没有 Fiddler 的情况下大约需要 70 秒才能完成,而通过 Fiddler 大约需要 2 秒...

另外,请注意,这不是代理检测延迟,并且在 nlb 上禁用了粘性 session 。

    public void Main(string[] args)
{
int i = 0;

while (i < 10)
{
HttpWebRequest wr = (HttpWebRequest)WebRequest.Create("http://nlb/service.asmx");
HttpWebResponse response;

wr.KeepAlive = true;
wr.UseDefaultCredentials = true;
response = (HttpWebResponse)wr.GetResponse();

using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
Console.WriteLine(sr.ReadToEnd());
}

response.Close();

i++;
}
}

这是 Fiddler 非常棒的另一个证明!

感谢您的任何建议。

最佳答案

这里只是一个镜头,也许看起来太容易了 -

但是您的代码的最后一行是 Response.Close()。 .NET 4.5 之前的文档除了“关闭现有的套接字连接”之外对此没有过多说明。

然而,在 .NET 4.5 中,这是文档:

This method terminates the connection to the client in an abrupt manner and is not intended for normal HTTP request processing.

http://msdn.microsoft.com/en-us/library/system.web.httpresponse.close(v=vs.110).aspx

我承认我不知道 .NET 4.5 和 HttpResponse 之前版本之间的一些细微差别;但是,我确实认为从逻辑上讲,Connection.Close() 与 Keep-Alive 不兼容;你可能会看到 Fiddler 的行为(可能是一个错误)来解决这个问题。只是一个理论 - 需要测试。

关于c# - HttpWebRequest,像 Fiddler 一样保持事件状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19898272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com