使用HttpWebRequest,我正在尝试查询一个在轮询模式下的负载均衡设置后面的受保护(协商)URL(两个IIS 7.5服务器)。看起来很简单,但我遇到了一些问题。
第一个匿名请求发送到一个服务器,协商部分发送到另一个服务器。问题在于这两个请求之间需要大约六秒钟的时间,所以太长了。试图诊断延迟,我意识到通过Fiddler代理,所有请求都发送到同一个服务器,所以总共不到一秒钟就完成了。如果我禁用Fiddler的“重用服务器连接”选项,则我的请求与没有Fiddler时的行为相同,并且需要很长时间。
在Google上搜索此问题,我最终找到了这个链接:http://fiddler2.com/blog/blog/2013/02/28/help!-running-fiddler-fixes-my-app- 我知道Fiddler使用套接字和自己的连接池,但是否有一种方法可以使用.NET HttpWebRequest复制相同的行为,以便我的请求(匿名和协商)将重用连接并最终发送到同一台服务器?
以下是一个快速测试,如果没有Fiddler,则需要约70秒才能完成,而通过Fiddler则只需要约2秒钟...
另请注意,这不是代理检测延迟,并且在nlb上禁用了粘性会话。
这是Fiddler非常棒的又一个证明!感谢任何建议。
第一个匿名请求发送到一个服务器,协商部分发送到另一个服务器。问题在于这两个请求之间需要大约六秒钟的时间,所以太长了。试图诊断延迟,我意识到通过Fiddler代理,所有请求都发送到同一个服务器,所以总共不到一秒钟就完成了。如果我禁用Fiddler的“重用服务器连接”选项,则我的请求与没有Fiddler时的行为相同,并且需要很长时间。
在Google上搜索此问题,我最终找到了这个链接: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非常棒的又一个证明!感谢任何建议。
Response.Close()
行会发生什么? - theMayer