如何使用Fiddler监视WCF服务


107

我有一个WCF服务,它接受复杂的类型并返回一些数据。我想使用Fiddler查看服务的传入请求的外观。客户端是使用服务参考代理的.net控制台应用程序。Fiddler有可能吗?我是这个工具的新手,过去仅使用它在请求构建器中发布数据。


4
WCF跟踪服务本身就非常好,包括用于查看它们的漂亮GUI。msdn.microsoft.com/zh-CN/library/ms751526.aspx
肯尼

Answers:


148

您需要在web.config中添加它

<system.net>
  <defaultProxy>
    <proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://127.0.0.1:8888" />
  </defaultProxy>
</system.net>
  1. 然后在WEBSERVER计算机上启动Fiddler。
  2. 点击工具| Fiddler Options => Connections =>将端口调整为8888。(如果需要,可以允许远程)
  3. 好的,然后从文件菜单捕获流量。

仅此而已,但别忘了在关闭提琴手之后删除web.config行,因为如果不这样做,将会出错。

参考:http : //fiddler2.com/documentation/Configure-Fiddler/Tasks/UseFiddlerAsReverseProxy


1
谢谢,这确实对我也有帮助。我的错误是未http://在代理地址中指定。正如您所提到的,其余所有内容都是相同的。
Johnny_D

1
这对我不起作用。我的情况是:服务器是IIS7.5,客户端是控制台应用程序。在我的控制台应用程序中,我调用了WebService方法,该方法部署在开发计算机上的IIS7.5上。我的计算机名称对我有用。
2014年

5
谢谢,对我有用。顺便说一句,以我为例,我试图捕获localhost上的WCF客户端流量,因此除了添加您的设置之外,它还需要将URL从更改http://localhost/abc.svchttp://HOSTNAME/abc.svc
cateyes 2014年

1
由于某些原因对我不起作用(我正在使用.svc Web服务)。最终,我的解决方法是使用Windows的catcher
ren

2
太棒了!@cateyes的建议为我做到了
Alexander Derck

9

Fiddler侦听出站请求,而不是入站请求,因此您将无法使用Fiddler监视进入服务的所有请求。

Fiddler最好的功能是能够查看所有由控制台应用程序生成的请求(假设该应用程序生成了Web请求而不是使用其他管道)。

如果您想要一个功能更强大(但更难使用)的工具来监视所有传入请求,则应签出WireShark。

编辑

我站得住了。感谢Eric Law发布了将Fiddler配置为反向代理的说明


谢谢(你的)信息。我需要查看类似于asmx服务描述页面的请求结构。WCF似乎没有此选项。
Quadwwchs 2011年

9
这不是很准确(“电源”是主观的,因为WireShark无法更改流量)。有关如何侦听入站流量的更多详细信息,请参见fiddler2.com/fiddler/help/reverseproxy.asp
EricLaw 2011年

埃里克-我建议您在一个独立的答案中说明。
Cheeso 2011年

9

刚遇到这个问题,对我有用的是使用localhost.fiddler:

 <endpoint address="http://localhost.fiddler/test/test.svc"
            binding="basicHttpBinding" 
            bindingConfiguration="customBinding" 
            contract="test" 
            name="customBinding"/>

6

合并了一些用例的注释/答案中提到的警告。

通常,请参见http://docs.telerik.com/fiddler/Configure-Fiddler/Tasks/ConfigureDotNETApp

  • 在您的应用程序之前启动Fiddler
  • 在控制台应用程序中,您可能不需要指定proxyaddress

    <proxy bypassonlocal="False" usesystemdefault="True" />
  • 在Web应用程序/ IIS中托管的内容中,您需要添加proxyaddress

    <proxy bypassonlocal="False" usesystemdefault="True" proxyaddress="http://127.0.0.1:8888" />
  • .NET(通过服务客户端或诸如此类HttpWebRequest)发出请求时,它将始终绕过Fiddler代理以获取包含的URL localhost,因此您必须使用别名(如计算机名)或在“主机”文件中添加内容(这就是为什么)类似localhost.fiddlerhttp://HOSTNAME有效的东西)
  • 如果您指定proxyaddress,则必须在Fiddler未启用的情况下将其从配置中删除,否则您的应用发出的任何请求都会引发异常,例如:

    无法建立连接,因为目标计算机主动拒绝它127.0.0.1:8888

  • 不要忘记使用配置转换来删除生产中的代理部分

4

如此简单,您只需要在配置客户端中更改地址:而不是'localhost'更改为计算机名称或IP


1

如果您可以控制正在发送通信的客户端,则这很简单。您需要做的只是在客户端服务类上设置HttpProxy。

例如,我这样做是为了跟踪在智能手机上运行的Web服务客户端。我将代理服务器设置在与网络上PC上运行的Fiddler的IP /端口的客户端连接上。然后,智能手机应用程序通过Fiddler将其所有传出通信发送到Web服务。

这工作得很好。

如果您的客户是WCF客户,请参阅此问答以了解如何设置代理。

即使您没有能力修改客户端应用程序的代码,也可以根据客户端使用的Web服务堆栈来管理性地设置代理。


1

标准WCF跟踪/诊断

如果由于某种原因您无法使Fiddler正常工作,或者宁愿以其他方式记录请求,则另一种选择是使用标准WCF跟踪功能。这将产生一个具有漂亮查看器的文件。

文件

请参阅https://docs.microsoft.com/zh-cn/dotnet/framework/wcf/samples/tracing-and-message-logging

组态

将以下内容添加到您的配置中,确保c:\logs存在,重建并发出请求:

  <system.serviceModel>
    <diagnostics>
      <!-- Enable Message Logging here. -->
      <!-- log all messages received or sent at the transport or service model levels -->
      <messageLogging logEntireMessage="true"
                      maxMessagesToLog="300"
                      logMessagesAtServiceLevel="true"
                      logMalformedMessages="true"
                      logMessagesAtTransportLevel="true" />
    </diagnostics>
  </system.serviceModel>

  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel" switchValue="Information,ActivityTracing"
        propagateActivity="true">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>
      <source name="System.ServiceModel.MessageLogging">
        <listeners>
          <add name="xml" />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add initializeData="C:\logs\TracingAndLogging-client.svclog" type="System.Diagnostics.XmlWriterTraceListener"
        name="xml" />
    </sharedListeners>
    <trace autoflush="true" />
  </system.diagnostics>

0

我使用了“鲨鱼”工具来监视从浏览器中的Silver light应用到服务的服务呼叫。尝试链接给出明确的信息

它使您可以监视整个请求和响应内容。


0

我刚刚尝试了Brad Rem的第一个答案,并在web.config中的BasicHttpBinding下进行了此设置:

<system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding bypassProxyOnLocal="False" useDefaultWebProxy="false" proxyAddress="http://127.0.0.1:8888" ...
        ...
      </basicHttpBinding>
    </bindings>
    ...
<system.serviceModel>

希望这对某人有帮助。


0

您可以使用免费版本的HTTP调试器。

它不是代理,您不需要在web.config中进行任何更改。

同样,它可以同时显示两个;传入和传出HTTP请求。 HTTP调试器免费

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.