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

本文关键字:第三方 web 服务 xml 客户端 编程 方式 | 更新日期: 2023-09-27 18:27:02

我经常调用可能由经典web服务(ASMX) or WCF开发的第三方web服务。我只是从我的VS IDE中添加他们的web服务引用,当我们从我的端调用该web服务时,就会生成一个xml并发布到web服务url。当我需要捕获web服务发布到web服务url的xml时,我需要使用fiddler,但我需要以编程方式捕获正在运行的xml。

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

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

无论第三方服务是旧的asmx web服务还是WCF服务,都可以使用WCF客户端使用它们。也就是说,如果您使用WCF,那么很容易捕获传出和传入消息。

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

它将允许您将行为附加到WCF端点,该端点将允许您访问WCF客户端的传出和传入消息。由于它将是你的消息检查器,你将能够对消息做任何你想做的事情——记录它,以任何你想要的方式更改它,等等。

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

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

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