【发布时间】:2013-09-16 11:37:53
【问题描述】:
我有 Web 应用程序并在内部调用 WCF 和 ASMX 服务来获取信息。 但是,在 fildder 中,我只能看到唯一的 Web 应用程序 aspx 请求,而不是 WCF 和 asmx 服务调用。
如何在 Fiddler trafiice 中捕获那些 WCF 和 asmx 调用。
如果 fiddler 没有该选项,请推荐一些其他工具。
【问题讨论】:
我有 Web 应用程序并在内部调用 WCF 和 ASMX 服务来获取信息。 但是,在 fildder 中,我只能看到唯一的 Web 应用程序 aspx 请求,而不是 WCF 和 asmx 服务调用。
如何在 Fiddler trafiice 中捕获那些 WCF 和 asmx 调用。
如果 fiddler 没有该选项,请推荐一些其他工具。
【问题讨论】:
默认情况下,Fiddler 作为代理服务器运行,它捕获通过它的流量。
当您在客户端上运行 Fiddler 时,您的浏览器会通过 Fiddler 将请求传递到服务器。如果您的客户端和服务器在同一台 PC 上,由于 .NET Framework 中的硬编码限制,发送到 localhost 或 127.0.0.1 的流量可能会绕过 Fiddler(浏览器不存在此问题)。
要解决此问题,您可以更新 .NET 代码以使用 Fiddler 支持的 localhost 的 别名 之一,即:localhost.fiddler 或 ipv4.fiddler 或 ipv6.fiddler。
如果 Fiddler 在服务器上运行,并且您想要捕获服务器端代码发出的请求(例如来自 ASP.NET 的出站请求),那么您需要配置您的 ASP.NET 应用程序以发送它的到 Fiddler 的流量。这是因为,当 Fiddler 运行时,它会将 当前用户 配置为将其流量发送到 Fiddler,但 ASP.NET 在 Windows 服务帐户 内而不是在当前用户的帐户内运行.有几种方法可以捕获从 ASP.NET 内部发出的请求,但this blog post 总结了最简单的方法。更新适当的machine.config(通常是文件的 64 位版本)以包含该行
<proxy autoDetect="false" bypassonlocal="false" proxyaddress="http://127.0.0.1:8888" usesystemdefault="false" />
现在,如果 Fiddler 在不同的服务器上运行,那么您必须配置代理设置以指向 Fiddler 运行的任何机器,例如 p>
<proxy autoDetect="false" bypassonlocal="false" proxyaddress="http://MyFiddlerServer:8888" usesystemdefault="false" />
【讨论】:
Fiddler 的工作原理是在一个端口(例如 8888)拦截 Web 请求,然后将请求转发到您在 WCF 中设置的实际目标端口(例如 8000)。这就是允许 Fiddler 捕获主机和客户端之间的双向流量的原因。
因此,您需要在客户端或主机上运行提琴手。然后,在启动 Fiddler 后,转到 Tools 菜单并选择 Fiddler Options,确保它正在侦听端口 8888。接下来,转到 Rules 菜单,选择 Customize Rules 并在 Handlers 类中添加如下代码:
if (oSession.host=="localhost:8888") {
oSession.host="localhost:8000";
}
接下来,更改您的客户端应用程序,使其使用 8888(而不是普通端口号),然后运行该程序。如果设置正确,Fiddler 将充当中间人,拦截并记录请求和响应。
祝你好运。如果这可以作为答案,请不要忘记标记它。
【讨论】: