WCF呼叫未在Fiddler2中显示

时间:2011-05-23 16:35:14

标签: wcf fiddler

我有一个带有basicHttp绑定的简单WCF服务。该服务在IIS7中本地托管(Win7笔记本电脑)。我可以在http://localhost/musicstore/musicstore.svc浏览该服务 (80号港口)

我开发了一个简单的Windows窗体客户端应用程序来调用该服务。它工作正常,但我真的希望通过Fiddler2看到消息调用/响应。当我浏览网页时,Fiddler2会愉快地报告流量,所以我无法理解为什么它没有接收到这个WCF呼叫?

是否有其他方法可以查看WCF调用的数据。也许有微软工具?

客户端配置为:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>

    <client>
      <endpoint address="http://localhost/musicstore/musicstore.svc"
        binding="basicHttpBinding" bindingConfiguration="" contract="MusicStore.IMusicStore"
        name="BasicHttp" />
    </client>
  </system.serviceModel>
</configuration>

服务配置为:

<services>
   <service behaviorConfiguration="MusicStoreBehavior" name="MusicStore">
    <endpoint address="" binding="basicHttpBinding" contract="IMusicStore">
     <identity>
      <dns value="localhost" />
     </identity>
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
   </service>
  </services>

4 个答案:

答案 0 :(得分:15)

查看WCF正在做什么的最简单方法是打开WCF自己的登录。您可以通过编辑web.config并添加

来完成此操作
<system.diagnostics>
  <sources>
      <source name="System.ServiceModel.MessageLogging">
        <listeners>
                 <add name="messages"
                 type="System.Diagnostics.XmlWriterTraceListener"
                 initializeData="c:\logs\messages.svclog" />
          </listeners>
      </source>
    </sources>
</system.diagnostics>

<system.serviceModel>
  <diagnostics>
    <messageLogging 
         logEntireMessage="true" 
         logMalformedMessages="false"
         logMessagesAtServiceLevel="true" 
         logMessagesAtTransportLevel="false"
         maxMessagesToLog="3000"
         maxSizeOfMessageToLog="2000"/>
  </diagnostics>
</system.serviceModel>

MSDN提供了有关您可以配置的内容的更多详细信息。您可以在Service Trace Viewer

中查看日志

答案 1 :(得分:8)

这个问题有很多重复,其中很多都有正确的答案。您应该使用http://localhost.fiddler/作为目标,.NET将正确代理请求。在传递请求之前,Fiddler会将“localhost.fiddler”更改为“localhost”。

答案 2 :(得分:3)

您可以修改客户端的配置文件:

<configuration>
  <system.net>
    <defaultProxy>
      <proxy bypassonlocal="false" usesystemdefault="true" />
    </defaultProxy>
  </system.net>
</configuration>

或者您可以使用:

GlobalProxySelection.Select = new WebProxy("127.0.0.1", 8888);

来自:Fiddler site

答案 3 :(得分:0)

我遇到了同样的问题并以这种方式修复:

  1. 在IIS express中托管您的服务
  2. 使用Documents / IISExpress / config中的IISExpress的applicationhost.config为您的外部LAN ip添加绑定
  3. 使用荷兰尼科的代理配置(见下文)

  4. 确保您的客户端应用程序使用“外部”IP。所以192.168.1.X而不是localhost。

  5. 您可能需要更改WCF配置以允许asp.net 4.0的多个绑定

    <serviceHostingEnvironment multiplesitebindingsenabled="true"/>