我们正在替换使用 VS2005 构建的旧(5 年以上)Windows 服务应用程序,该应用程序发出 HTTP GET 调用。有几件事使这变得困难(例如 Web 服务器在客户的网络上,我们无法直接连接到它),不幸的是,我们不希望关闭正在运行的系统来用 WinForm 替换它Fiddler 可以监控的版本。新代码似乎做的一切都是正确的,但遗憾的是,它未能通过身份验证。
有没有办法配置 Fiddler (2.2.9.1) 来拦截来自 Windows 服务的 HTTP 调用?
Codeka provided a clue to get me going in the right direction. The piece that was still missing was how to get the proxy configured. The <appname>.exe.config
needs <defaultProxy>
specified to have a section like the following added:
<configuration>
<!-- The `<system.net>` element is an immediate child of `<configuration>` but can appear anywhere in app.config -->
<system.net>
<defaultProxy enabled="true">
<proxy proxyaddress="http://127.0.0.1:8888" bypassonlocal="False"/>
</defaultProxy>
</system.net>
</configuration>
Once this was done the Windows service's http traffic started flowing through Fiddler.
Fiddler 只是充当 HTTP 代理,因此如果您可以在服务中配置代理,那么您可以将其配置为通过 Fiddler。这是否可能很难说...
如果这不起作用,您可以通过在第二台计算机上运行 Fiddler 并将其配置为侦听端口 80 来实现。然后在您的“测试”计算机上,编辑您的主机文件,使其指向第二台计算机。假设 Web 服务位于 www.example.com,您设置了测试服务器,以便“www.example.com”指向您的第二台计算机(运行 Fiddler)。然后,当服务连接到“www.example.com”时,它实际上会连接到 Fiddler。Fiddler 将在记录请求/响应后将连接转发到真实的www.example.com。
我还没有测试过以上,但我认为它会工作。显然,如果您可以在服务中配置代理设置,那就更容易了!
As .NET bypasses proxies for localhost and 127.0.0.1, just hardcode your machine name instead for the url you're testing with.
//myUrl = "http://127.0.0.1/myservice";
myUrl = "http://mymachine/myservice";
而且,当然,如果 Fiddler 不起作用,总会有Wireshark。作为提示,请在 Wireshark 中使用几个过滤器(例如,仅显示进出目标 IP 的数据包)以避免感觉您正在被数据淹没。
注意:重要提示:无论其他设置如何,.NET 将始终绕过包含 localhost 的 URL 的 Fiddler 代理。因此,不要使用 localhost,而是将代码更改为引用机器名称。例如:
此 URL 不会出现在 Fiddler 中:
http://localhost/X509SignCodeService/X509SigningService.asmx 这个 URL 会出现在 Fiddler 中: