代码之家  ›  专栏  ›  技术社区  ›  IanT8

如何拦截来自C客户端Web代理的出站和入站SOAP消息

  •  2
  • IanT8  · 技术社区  · 16 年前

    我正在编写UI来测试ASMX Web服务。服务器和客户端是.NET。已使用wsdl.exe生成客户端代理。

    我想截取和存储一个表示传出和传入的字符串 肥皂 由于在Web代理上调用方法而生成的消息,因此我可以向UI添加一个功能,该功能将显示刚刚发送/接收的消息。

    我隐约记得有两对扩展点可以在其中添加代码来接收消息,但我不记得是如何完成的。我认为我所想到的示例包括压缩客户机上的消息的某些部分和服务器上的反向消息,即使在我的场景中,我希望存储而不是更改消息。

    收到任何提示和帮助,不胜感激。

    (我已经部分实现了soapextension。我不知道chainstream方法是如何工作的,也不知道如何通知侦听器SOAP消息被捕获(因为我无法控制SOAP扩展的实例化)。

    4 回复  |  直到 9 年前
        1
  •  1
  •   alexdej    16 年前

    你在SoapExtension上走对了。您在这里看到文档和示例了吗? http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapextension.aspx

    使用chainstream的想法是将请求写入的网络流传递给您,您可以选择返回不同的流。因此,如果要保存请求的副本,请返回一个memorystream,Web服务客户机将把请求写入其中,然后在processmessage调用中,您可以从中复制数据并将其传递给UI。

        2
  •  1
  •   Sergio Cabral    9 年前

    另一种捕获XML的方法是通过 线缆 应用。它拦截通信网卡。

    在我的例子中,我调用了一个服务,作为他的地址的一部分 皮奥索 . 我使用“查找数据包”窗口进行搜索。

    然后找到了XML。

    请看图片。

    (我知道……这不是一种程序化的方法,但它有它的价值。LOL)

    enter image description here

        3
  •  0
  •   Manitra Andriamitondra    16 年前

    我建议两个技巧:

    • 对代理进行子类化并重载方法(有点无聊,但您可以生成类似于此项目中的代码: http://ftwsf.codeplex.com/ )
    • 使用异步签名和对每个方法的“已完成”事件的订阅(您可以通过反射来做到这一点,以避免编写过多的代码)

    如果你需要更多关于这些技巧的信息,请告诉我。

        4
  •  0
  •   John Saunders    16 年前

    使用WCF作为客户机技术会更好。然后,您可以简单地使用WCF消息级跟踪来记录传入和传出消息。这只需通过配置完成。

    没有理由仅仅因为使用的是ASMX服务就必须使用ASMX客户机。