【问题标题】:WCF - Viewing xml request/response to a secure webserviceWCF - 查看对安全 Web 服务的 xml 请求/响应
【发布时间】:2010-03-11 17:13:37
【问题描述】:

我有一个 WCF 服务应用程序,在这个应用程序中,我通过安全连接调用第三方 Web 服务。

我一直在尝试使用 fiddler 查看请求响应流,但在尝试了半天多之后我已经放弃了它,我在互联网上找到了所有我能找到的东西。尽管我为受信任区域提供了更多提琴手证书,但证书存在问题。

简单地查看我对该第三方 Web 服务发出的 xml 请求和响应的最佳选择是什么?

我正在使用生成的代理类,因此我目前无法访问我正在发送和接收的原始 xml。我很好奇我是否过度复杂化了可以做得更简单的事情。这是我的开发机器,我可以访问几乎所有内容,没有任何限制。

请问有一个简单的方法吗?

编辑:

此时我什至不需要使用 Tracing。我只需要查看我的请求/响应的序列化输出。即使我可以从 Visual Studio 调试器等中做到这一点,它也会有所帮助。

【问题讨论】:

    标签: c# .net xml wcf


    【解决方案1】:

    使用WCF Tracing - 它工作得很好,并带有一个方便的trace viewer utility

    您可以设置大量选项 - 但在其核心,您必须将类似这样的内容添加到您的 WCF 服务和客户端配置中:

    <configuration>
       <system.diagnostics>
          <sources>
                <source name="System.ServiceModel" 
                        switchValue="Information, ActivityTracing"
                        propagateActivity="true">
                <listeners>
                   <add name="traceListener" 
                       type="System.Diagnostics.XmlWriterTraceListener" 
                       initializeData= "c:\log\Traces.svclog" />
                </listeners>
             </source>
          </sources>
       </system.diagnostics>
    </configuration>
    

    有多种开箱即用的“跟踪侦听器”——一个写入到 Visual Studio 中的输出控制台,这个在这里创建 XML 文件,或者您可以将内容存储在 SQL Server 数据库表中——以及整个机制是可扩展的,你也可以编写自己的跟踪监听器!

    另请参阅此处:Using of WCF Trace 和此处WCF Tracing FAQ 了解更多信息。

    【讨论】:

    • 我是这样设置的,但是跟踪中没有包含关于我的应用程序和第 3 方 Web 服务之间的通信的任何内容...可能是由于 SSL 造成的吗??
    • “您的应用程序和第 3 方网络服务”之间的通信是 WCF 调用吗?那么您肯定会在 WCF 日志中看到条目。
    • 第 3 方是作为 Web 引用添加到我的 wcf 应用程序的 Web 服务。我的应用程序正在发送请求并接收来自该服务的响应。来自此通信的任何 req/resp 参数信息绝对不存在于跟踪中。即使使用记事本,我也已经在跟踪上完成了查找/搜索操作,并且在日志中没有任何我的 req/resp 对象或值的跟踪。目前正在实现拦截器行为来拦截消息,希望这会给我我需要的东西..
    • @Kaivalya:如果您可以将其添加为 WCF 服务 引用,则可以使用 WCF 跟踪来跟踪通过它的流量......
    【解决方案2】:

    由于我试图从引用到我的 WCF 应用程序的 asmx Web 服务中读取肥皂消息,因此我的问题的解决方案是创建一个继承自 System.Web.Services.Protocols.SoapExtension 的类,在 web.config 中注册此类,以便所有流量都通过此类路由并查看。

    这种通信都不会显示在 WCF 跟踪上,因此这还不够。但是,我学到了它很有用,所以现在我可以看到我的 wcf 服务应用程序和 Web 应用程序之间发生的所有事情。

    这篇文章为我钉上了它how-to-capture-soap-envelopes-when-consuming-a-web-service

    【讨论】:

    【解决方案3】:

    将此添加到您的 app.config:

    <system.diagnostics>
    <sources>
      <source name="System.ServiceModel.MessageLogging">
        <listeners>
          <add name="messages" type="System.Diagnostics.XmlWriterTraceListener" initializeData="messages.svclog" />
         </listeners>
      </source>
    </sources>
    

    <system.serviceModel>
    <diagnostics>
      <messageLogging
           logEntireMessage="true"
           logMalformedMessages="true"
           logMessagesAtServiceLevel="true"
           logMessagesAtTransportLevel="false"
           maxMessagesToLog="-1"/>
    </diagnostics>
    

    它将所有消息记录到messages.svclog。然后您可以查看它们。

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-24
    • 1970-01-01
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-04
    相关资源
    最近更新 更多