【问题标题】:How to capture 3rd party web service xml from client end programmatically如何以编程方式从客户端捕获 3rd 方 Web 服务 xml
【发布时间】:2014-10-18 10:09:24
【问题描述】:

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

我不知道如何以编程方式从客户端捕获它。我需要一个简单的解决方案来捕获用于开发 Web 服务的任何技术。我想从外部挂钩,以便在调用 Web 服务时触发一个事件,并且从该事件中我应该能够获得整个 xml.寻找详细帮助。谢谢

【问题讨论】:

  • 看看Web Service Discovery Tool (disco)。也许您可以尝试以编程方式使用该命令? AFAIK Visual Studio 使用迪斯科工具从 GUI(VS 解决方案)中创建 Web 服务引用。
  • 可能是Web服务可以用wcf开发,那么如何以编程方式捕获?

标签: c# xml web-services wcf


【解决方案1】:

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

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

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

【讨论】:

  • 视情况而定。有多少流量通过您的服务?消息有多大?自然不会改善您的服务绩效,但如果使用适当的工具正确处理,影响可以忽略不计。
【解决方案2】:

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

【讨论】:

  • 是否有任何示例代码,例如如何在我的项目中集成提琴手核心。
【解决方案3】:

没有单个扩展点可以获取任何传出 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。

【讨论】:

  • 我应该在客户端添加你在这里给出的整个 xml。它也适用于 asmx 吗?
  • yes 添加所有内容。这不适用于 asmx。我认为你需要使用 SoapExtension
  • 感谢您的回复。如果我添加上面的xml,那么会有任何性能问题吗?
  • 是的,记录完整消息总是会降低性能,尤其是在您有很多呼叫的情况下。您需要进行测试,看看这是否会产生有意义的影响。
  • 在现实生活中人们如何记录传入和传出的xml?
猜你喜欢
  • 1970-01-01
  • 2014-01-20
  • 1970-01-01
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多