HttpWebRequest,像Fiddler一样保持活力吗?

时间:2013-11-11 03:15:49

标签: c# asp.net .net vb.net fiddler

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

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

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

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

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

此外,请注意,它不是代理检测延迟,并且在nlb上禁用粘性会话。

    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非常棒的另一个证据!

感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

这里只是一个镜头,也许这似乎太容易了 -

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

在.NET 4.5中,这是文档:

  

此方法突然终止与客户端的连接   方式,不适用于正常的HTTP请求处理。

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

我承认我不知道.NET 4.5与先前版本HttpResponse之间的一些细微差别;但是,我认为逻辑上,Connection.Close()与Keep-Alive不兼容;而且你可能会看到Fiddler干预的行为(可能是一个错误)来补丁。只是理论需求测试。