如何以编程方式从客户端捕获第三方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以获得详细的帮助。感谢
无论第三方服务是旧的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.