【问题标题】:View raw XML request查看原始 XML 请求
【发布时间】:2009-12-15 09:24:00
【问题描述】:

我对 WCF 和 SOAP 消息传递非常陌生,但我设法组装了一个相当不错的客户端,我用它来从媒体组织下载新闻故事。我生成的代理类显然抽象了很多,这意味着我基本上只是在创建对象、调用方法和迭代结果。

我的问题是我有原始 XML 示例来说明对 Web 服务的调用应该是什么样的,我希望能够将这些示例与我正在进行的调用进行“比较”。基本上我需要确保我所做的调用与用于测试目的的示例 XML 文件相同。

我所问的是否有道理,还是我以错误的方式解决这个问题?如果我遗漏了任何必要的信息,请告诉我,我可以继续寻找段落,但不确定哪些信息是相关的。

【问题讨论】:

    标签: .net wcf soap web-services


    【解决方案1】:

    您可以使用 WCF 跟踪来记录原始 XML 消息。以下是.config 使用原始消息日志记录启用 WCF 跟踪:

    <configuration>
      <system.serviceModel>
        <diagnostics>
          <messageLogging maxMessagesToLog="30000"
                  logEntireMessage="true"
                  logMessagesAtServiceLevel="true"
                  logMalformedMessages="true"
                  logMessagesAtTransportLevel="true">
          </messageLogging>
        </diagnostics>
      </system.serviceModel>
      <system.diagnostics>
        <sources>
          <source name="System.IdentityModel" switchValue="Verbose" logKnownPii="true">
            <listeners>
              <add name="xml" />
            </listeners>
          </source>
          <!-- Log all messages in the 'Messages' tab of SvcTraceViewer. -->
          <source name="System.ServiceModel.MessageLogging">
            <listeners>
              <add name="xml" />
            </listeners>
          </source>
          <!-- ActivityTracing and propogateActivity are used to flesh out the 'Activities' tab in
               SvcTraceViewer to aid debugging. -->
          <source name="System.ServiceModel" switchValue="Error, ActivityTracing" propagateActivity="true">
            <listeners>
              <add name="xml" />
            </listeners>
          </source>
          <!-- This records Microsoft.IdentityModel generated traces, including exceptions thrown
               from the framework. -->
          <source name="Microsoft.IdentityModel" switchValue="Warning">
            <listeners>
              <add name="xml" />
            </listeners>
          </source>
        </sources>
        <sharedListeners>
          <add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="trace.e2e" />
        </sharedListeners>
        <trace autoflush="true" />
      </system.diagnostics>
    </configuration>
    

    您可以从MSDN: Configuring Tracing 阅读有关 WCF 跟踪的更多信息。

    Microsoft 提供了一个Service Trace Viewer Tool 来读取 .svclog 文件。

    确保initializeData 中定义的路径可被您的服务写入。

    【讨论】:

      【解决方案2】:

      您是否使用过 Microsoft 的 Service Trace Viewer 工具? This MSDN page会给你详细的使用方法。

      【讨论】:

      • 感谢您的回复,笨蛋。我会看看这个,然后会回复我的进展情况。
      【解决方案3】:

      对此的常用答案是使用 fiddler 作为代理 - 这将允许您查看客户端和服务之间的传出 传入消息。

      还不能从个人经验中说出来,但是为我开发的团队成员(在前世)已经 - 非常正确地 - 编写了我们的服务包装器,内置了对使用代理的支持明确 简化 fiddler 的使用。

      【讨论】:

      • 感谢您的回复。使用 Fiddler 的问题在于它是一个 SSL 安全的 Web 服务,因此存在 Web 服务不喜欢 Fiddler 证书的问题,因为它是一个无法识别的 CA。我尝试过覆盖服务器证书验证,但是 Web 服务发生了一些事情,它根本不喜欢这样。答案可能是继续玩这个
      • 你试过Live HTTP headers,一个Firefox的插件吗?我不确定它是否支持 CA,但值得一试。
      【解决方案4】:

      您可以使用IClientMessageInspector 接口创建自己的消息检查器,并获取请求和响应的原始消息。

      这是一篇关于如何做的好帖子 ==> http://www.keithelder.net/blog/archive/2008/01/15/How-to-Get-Around-WCFs-Lack-of-a-Preview-Web.aspx

      【讨论】:

        【解决方案5】:

        我对 WCF 了解不多,但您可以将连接重定向到网络上的其他 Web 服务器,该服务器在某处记录了正文。这将使您能够准确地看到您发送的内容,但需要一些基础设施工作。这可能是在您的开发机器上运行的 Web 服务器。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-10-07
          • 1970-01-01
          • 1970-01-01
          • 2017-01-25
          • 1970-01-01
          • 1970-01-01
          • 2011-04-06
          • 2012-03-25
          相关资源
          最近更新 更多