21

我们正在替换使用 VS2005 构建的旧(5 年以上)Windows 服务应用程序,该应用程序发出 HTTP GET 调用。有几件事使这变得困难(例如 Web 服务器在客户的网络上,我们无法直接连接到它),不幸的是,我们不希望关闭正在运行的系统来用 WinForm 替换它Fiddler 可以监控的版本。新代码似乎做的一切都是正确的,但遗憾的是,它未能通过身份验证。

有没有办法配置 Fiddler (2.2.9.1) 来拦截来自 Windows 服务的 HTTP 调用?

4

5 回答 5

38

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.

于 2010-05-27T15:42:10.883 回答
5

Fiddler 只是充当 HTTP 代理,因此如果您可以在服务中配置代理,那么您可以将其配置为通过 Fiddler。这是否可能很难说...

如果这不起作用,您可以通过在第二台计算机上运行 Fiddler 并将其配置为侦听端口 80 来实现。然后在您的“测试”计算机上,编辑您的主机文件,使其指向第二台计算机。假设 Web 服务位于 www.example.com,您设置了测试服务器,以便“www.example.com”指向您的第二台计算机(运行 Fiddler)。然后,当服务连接到“www.example.com”时,它实际上会连接到 Fiddler。Fiddler 将在记录请求/响应后将连接转发到真实的www.example.com。

我还没有测试过以上,但我认为它会工作。显然,如果您可以在服务中配置代理设置,那就更容易了!

于 2010-05-27T00:33:41.863 回答
3

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";
于 2012-08-28T08:25:16.627 回答
3

而且,当然,如果 Fiddler 不起作用,总会有Wireshark。作为提示,请在 Wireshark 中使用几个过滤器(例如,仅显示进出目标 IP 的数据包)以避免感觉您正在被数据淹没。

于 2010-05-27T00:37:27.713 回答
-1

注意:重要提示:无论其他设置如何,.NET 将始终绕过包含 localhost 的 URL 的 Fiddler 代理。因此,不要使用 localhost,而是将代码更改为引用机器名称。例如:

此 URL 不会出现在 Fiddler 中:

http://localhost/X509SignCodeService/X509SigningService.asmx 这个 URL 会出现在 Fiddler 中:

于 2015-07-13T12:23:53.587 回答