【问题标题】:How Do I Intercept Outbound and Inbound Soap Messages from C# Client Side Web Proxy如何拦截来自 C# 客户端 Web 代理的出站和入站 Soap 消息
【发布时间】:2009-11-02 11:35:59
【问题描述】:

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

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

我隐约记得有两对扩展点可以添加代码来拦截消息,但我不记得这是如何完成的。我认为我想到的示例涉及在客户端压缩消息的某些部分并在服务器上压缩消息,即使在我的场景中,我想存储而不是更改消息。

感谢您的任何提示和帮助。

(我已经部分实现了 SoapExtension。我不明白 ChainStream 方法是如何工作的,并且我不确定如何通知侦听器肥皂消息已被捕获(因为我无法控制实例化肥皂扩展)。'

【问题讨论】:

    标签: c# .net web-services proxy-classes soap-client


    【解决方案1】:

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

    ChainStream 的理念是让您获得将写入请求的网络流,并且您可以选择返回不同的流。因此,如果您想保存请求的副本,请返回一个 MemoryStream,Web 服务客户端会将请求写入其中,然后在 ProcessMessage 调用中,您可以将数据从那里复制出来并将其传递给您的 UI。

    【讨论】:

    • 谢谢,我的解决方案基于 MSDN 示例。我创建了一个静态类,封装了一个字典来存储我的 UI 随后读取的出站和入站消息。
    【解决方案2】:

    另一种捕获 XML 的方法是通过 Wireshark 应用程序发送。拦截通讯网卡。

    在我的例子中,我调用了一个服务,该服务将他的地址作为字符串 PIOSOS 的一部分。我使用 Find Packet 窗口进行了搜索。

    然后找到 XML。

    看图。

    (我知道......这不是一种编程方式,但它有它的价值。哈哈)

    【讨论】:

      【解决方案3】:

      我建议 2 个技巧:

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

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2011-04-22
          • 1970-01-01
          • 2010-11-16
          • 1970-01-01
          • 1970-01-01
          • 2023-03-26
          • 1970-01-01
          • 1970-01-01
          • 2021-04-03
          相关资源
          最近更新 更多