【问题标题】:How to use Fiddler to monitor WCF service如何使用 Fiddler 监控 WCF 服务
【发布时间】:2011-06-05 12:19:48
【问题描述】:

我有一个接受复杂类型并返回一些数据的 WCF 服务。我想使用 Fiddler 查看服务的传入请求是什么样的。客户端是使用服务引用代理的 .net 控制台应用程序。提琴手可以做到这一点吗?我是这个工具的新手,过去只使用它通过请求生成器发布数据。

【问题讨论】:

标签: wcf fiddler


【解决方案1】:

你需要在你的 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 选项 => 连接 => 将端口调整为 8888。(如果需要,请允许远程)
  3. 好的,然后从文件菜单中捕获流量。

就是这样,但不要忘记在关闭 fiddler 后删除 web.config 行,因为如果不这样做会出错。

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

【讨论】:

  • 谢谢,这对我也很有帮助。我的错误是没有在代理地址中指定http://。正如你所提到的,其余的都是一样的。
  • 这对我不起作用。我的情况是:服务器是 IIS7.5,客户端是控制台应用程序。在我的控制台应用程序中,我调用了一个 WebService 方法,该方法部署在我的 IIS7.5 上开发计算机。用我的计算机名称替换“localhost”对我有用。
  • 谢谢,它对我有用。顺便说一句,就我而言,我尝试在 localhost 上捕获 WCF 客户端流量,因此除了添加您的设置之外,还需要将 URL 从 http://localhost/abc.svc 更改为 http://HOSTNAME/abc.svc
  • 由于某种原因对我不起作用(我正在使用 .svc Web 服务)。最终我的解决方法是在 Windows 上使用 catcher
  • 太棒了! @cateeyes 的建议为我做到了
【解决方案2】:

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

Fiddler 的最大优势是能够查看控制台应用生成的所有请求(假设应用生成 Web 请求而不是使用其他管道)。

如果您想要一个更强大(但更难使用)的工具来监控所有传入请求,您应该查看 WireShark。

编辑

我的立场是正确的。感谢 Eric Law 将路线发布到configuring Fiddler to be a reverse proxy

【讨论】:

  • 感谢您的信息。我需要查看类似于 asmx 服务描述页面的请求结构。 WCF 似乎没有这个选项。
  • 这不太准确(而且“功率”是主观的,因为 WireShark 无法改变流量)。有关如何监听入站流量的更多详细信息,请参阅fiddler2.com/fiddler/help/reverseproxy.asp
  • 埃里克 - 我建议你在一个独立的答案中说明这一点。
【解决方案3】:

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

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

【讨论】:

    【解决方案4】:

    整合 cmets/answers 中提到的几个用例的注意事项。

    大多数情况下,请参阅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 代理来处理包含 localhost 的 URL,因此您必须使用类似于机器名称的别名或在您的“主机”文件(这就是为什么像 localhost.fiddlerhttp://HOSTNAME 这样的文件有效)
    • 如果您指定 proxyaddress,如果 Fiddler 未开启,您必须将其从配置中删除,否则您的应用发出的任何请求都会引发如下异常:

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

    • 不要忘记使用config transformations 删除生产中的代理部分

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

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

        这非常有效。

        如果您的客户端是 WCF 客户端,请参阅 this Q&A 了解如何设置代理。

        即使您无法修改客户端应用程序的代码,您也可以通过管理方式设置代理,具体取决于您的客户端使用的 Web 服务堆栈。

        【讨论】:

          【解决方案7】:

          标准 WCF 跟踪/诊断

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

          文档

          https://docs.microsoft.com/en-us/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>
          

          【讨论】:

            【解决方案8】:

            将 URL 中的 localhost 更改为 localhost.fiddler,这个小改动对我有用。

            另外,如果有人从 WCF 测试客户端 测试服务,请不要忘记在配置端点中编辑 URL

            1. 右键点击配置文件
            2. 单击使用 Svc 配置编辑器编辑
            3. 点击 Endpoints 并将端点编辑为 localhost.fiddler
            4. 选中在调用方法时启动新代理

            【讨论】:

              【解决方案9】:

              我使用了 Wire Shark 工具来监控从浏览器中的 Silver Light 应用程序到服务的服务调用。试试link 给出明确的信息

              它使您能够监控整个请求和响应内容。

              【讨论】:

                【解决方案10】:

                我刚刚尝试了 Brad Rem 的第一个答案,然后在 BasicHttpBinding 下的 web.config 中找到了这个设置:

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

                希望这对某人有所帮助。

                【讨论】:

                  【解决方案11】:

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

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

                  另外,它可以同时显示;传入和传出的 HTTP 请求。 HTTP Debugger Free

                  【讨论】:

                    【解决方案12】:

                    使用 fiddler 反向代理是我的最终解决方案。

                    首先,使用 REGDIT 将 fiddler 配置为反向代理,就像文档说的那样:https://docs.telerik.com/fiddler/configure-fiddler/tasks/usefiddlerasreverseproxy#configure-fiddler-as-reverse-proxy
                    1)单击工具>提琴手选项。确保选中允许远程客户端连接
                    2)在HKEY_CURRENT_USER\SOFTWARE\Microsoft\Fiddler2内创建一个名为ReverseProxyForPort的新DWORD。
                    3) 将 DWORD 设置为 Fiddler 将重新路由入站流量的本地端口。
                    4)重启Fiddler。

                    二、将客户端改为通过代理调用服务
                    例如,这是我的客户端 app.config:

                    <client>
                        <endpoint address="http://localhost:61236/WeatherForecastService.svc"
                            binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IWeatherForecastService"
                            contract="ServiceReference1.IWeatherForecastService" name="BasicHttpBinding_IWeatherForecastService" />
                    </client>
                    

                    将客户端更改为使用代理端点地址。

                    WeatherForecastServiceClient client = new WeatherForecastServiceClient("BasicHttpBinding_IWeatherForecastService", "http://localhost:8888/WeatherForecastService.svc");
                    var data = client.GetData(1000);
                    client.Close();
                    

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2012-03-23
                      相关资源
                      最近更新 更多