2

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

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

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

感激地收到任何提示和帮助。

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

4

4 回答 4

1

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

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

于 2009-11-07T04:38:38.073 回答
1

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

就我而言,我调用了一个服务,该服务作为他的地址的一部分来字符串PIOSOS。我使用了 Find Packet 窗口并进行了搜索。

然后找到XML。

看图片。

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

在此处输入图像描述

于 2016-08-11T20:43:37.370 回答
0

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

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

于 2009-11-07T04:46:47.470 回答
0

我建议2个技巧:

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

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

于 2009-11-02T14:56:26.527 回答