C# 自制的.net压力工具只在Fiddler打开时产生压力——为什么?

C# 自制的.net压力工具只在Fiddler打开时产生压力——为什么?,c#,.net,fiddler,C#,.net,Fiddler,当我们试图在一个新的web应用程序上施加一些沉重的压力时,我们通常使用的一系列免费工具(是,其他一些免费的ms工具(wcat?)遇到了问题,所以我创建了一个v。使用.NETWebRequest对象,打开新线程,并不断点击文件中的URL列表的快速脏工具。在单个线程上,它以前产生了一点负载 然后,一旦我开始尝试多线程处理它(一次是通过尝试thread.start(),另一次是通过在webrequest对象上调用beginrequestgets),请求就不会到达服务器(iis日志中没有任何内容,执行的

当我们试图在一个新的web应用程序上施加一些沉重的压力时,我们通常使用的一系列免费工具(是,其他一些免费的ms工具(wcat?)遇到了问题,所以我创建了一个v。使用.NETWebRequest对象,打开新线程,并不断点击文件中的URL列表的快速脏工具。在单个线程上,它以前产生了一点负载

然后,一旦我开始尝试多线程处理它(一次是通过尝试thread.start(),另一次是通过在webrequest对象上调用beginrequestgets),请求就不会到达服务器(iis日志中没有任何内容,执行的请求没有增加,请求数/秒等等)——除非Fiddler处于启用状态!有了fiddler,它就像我所期望的那样工作


我对更多地使用这个小应用程序并不特别感兴趣(可能会尝试寻找另一个免费的网络压力工具——有什么建议吗?),但我的主要问题是,为什么我的小应用程序只在通过Fiddler代理时提供压力?有什么想法吗?

可能是应用程序中缺少代理设置。您是否通常使用代理服务器连接到您的服务器

Fiddler在登录用户的上下文中操作,包括任何代理设置。但是,在编写自己的
WebClient
/
HttpWebRequest
时,代理不会自动使用——您需要自己在代码或配置中启用代理

如果您的服务器(或代理)需要身份验证,也可能是权限问题

这里有一些代码可以用来解决缺少代理和缺少身份验证的问题。请注意,可以对WebClient使用与HttpWebRequest相同的代码:

WebClient wc  = new WebClient();
WebProxy wp = new WebProxy("http://myproxyserver:80/",true);
wp.UseDefaultCredentials = true;
wc.Proxy = wp;
wc.UseDefaultCredentials = true;
顺便说一句,我经常在这种奇怪的情况下使用的工具是。它很昂贵,但它像fiddler一样,但作为浏览器插件工作,这意味着它将检测代理问题和其他在fiddler中没有出现的问题。它还可以很好地与HTTPS配合使用。

您可以看看。它是Apache服务器软件的一部分,但是
ab.exe
是完全独立的,您不需要安装服务器。在描述中,它说它用于测试Apache超文本传输协议(HTTP)服务器,但它可以与任何HTTP服务器一起工作。我在多个项目中使用过它来执行压力测试,我可以说它是一个很棒的工具。由于它允许发布数据,因此也可以用来测试web服务


另一种选择来自微软。

我通常不使用代理服务器。由于Fiddler是一个代理服务器,显然你的应用程序正在接收登录用户的代理设置。否则,该应用程序将无法在Fiddler下工作!:-)您可能希望在应用程序的配置或代码中执行一些检测工作,以确定代理设置的位置,并尝试使用不同的设置(例如UseDefaultCredentials)来查看发生了什么。查看MSDN上有关代理检测以及如何关闭代理检测的信息。