2009-11-02 42 views
2

我写UI来测试ASMX Web服务入站SOAP消息。服务器和客户端是.NET。客户端代理已使用wsdl.exe生成。我如何拦截出站和C#的客户端Web代理

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

我依稀记得有两对在哪里可以可以添加代码intecept消息扩展点,但我不记得这是怎么做的。我想我所考虑的例子包括在客户端压缩一部分消息,在服务器上压缩消息的相反部分,即使在我的情况下,我想存储而不是修改消息。

感激地收到了任何提示和帮助。我不知道如何ChainStream方法的工作,我不知道如何通知监听器的肥皂消息已被困(因为我不在控制中。的实例SOAP扩展)”

回答

1

你是正确的轨道上的SoapExtension。你有没有在这里看到文档和例子? http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapextension.aspx

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

+0

谢谢,我基于我的解决方案的MSDN示例。我创建了一个封装字典的静态类,以存储我的UI随后读取的出站和入站消息。 – IanT8 2009-11-08 11:25:54

0

我建议2个招数:

  • 继承代理及重载的方法(有点枯燥,但你可以像在这个项目中生成代码:http://ftwsf.codeplex.com/
  • 使用异步签名并赋予每个我的'已完成'事件(你可以通过反射来做到这一点,以避免写入太多的代码)

如果您需要更多关于这些技巧的信息,请让我知道。

0

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

没有理由,你必须使用只是因为你使用的是ASMX服务的ASMX客户端。

1

另一种方式来捕捉XML通过Wireshark的应用程序发送。它拦截通讯网卡。

在我的情况下,我打了一个服务,作为他的地址的一部分字符串PIOSOS。我使用查找数据包窗口并进行搜索。

然后找到XML。

查看照片。

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

enter image description here