如何以编程方式从客户端捕获第三方Web服务xml

时间:2014-10-18 10:09:25

标签: c# xml web-services wcf

我经常拨打可能由经典网络服务(ASMX) or WCF开发的第三方网络服务。我只是从我的VS IDE添加他们的Web服务引用,当我们从我的末端调用该Web服务时,生成一个xml并发布到Web服务URL。当我需要捕获Web服务发布到web服务URL的xml然后我需要使用fiddler但我需要以编程方式捕获xml。

我不知道如何从客户端以编程方式捕获它。我需要一个简单的解决方案来捕获用于开发Web服务的任何技术。我想从外面挂钩,因此当调用Web服务时会触发一个事件,从该事件我应该能够获得整个xml.looking以获取详细信息。感谢

3 个答案:

答案 0 :(得分:1)

第三方服务是旧的asmx Web服务还是WCF服务,您可以使用WCF客户端使用它们。也就是说,如果您使用WCF,则可以轻松捕获传出和传入的消息。

您需要的是一个名为Message Inspector的WCF扩展点。检查此链接: http://msdn.microsoft.com/en-us/library/ms733786(v=vs.110).aspx

它允许您将行为附加到WCF端点,该端点将允许您访问WCF客户端的传出和传入消息。由于它将是您的消息检查器,您将能够通过消息执行任何操作 - 记录它,以任何您想要的方式更改它等等。

答案 1 :(得分:1)

如果Fiddler满足您的需求,您实际上可以将Fiddler的核心引擎集成到您的代码中并以这种方式捕获事物。该库可在http://www.telerik.com/fiddler/fiddlercore

找到

答案 2 :(得分:0)

没有一个扩展点可以获取任何传出的SOAP。您可以构建自己的代理并强制所有消息通过它,但会有性能损失和一般开销。但是每个框架都有自己的扩展点。您可以实现每个,然后调用一个处理两者的接口。例如,在WCF中,您可以实现跟踪侦听器以接收有关传出SOAP的消息。见sample here。使日志看起来像这样:

<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>

并使用您自己的类而不是System.Diagnostics.XmlWriterTraceListener。

相关问题