我正在编写 UI 来测试 asmx 网络服务。服务器和客户端是.NET。已使用 wsdl.exe 生成客户端代理。
我想拦截并存储作为调用网络代理方法的结果生成的传出和传入 SOAP 消息的字符串表示形式,因此我可以向 UI 添加一个功能,它将显示刚刚发送/接收的消息。
我依稀记得有两对扩展点,可以在其中添加代码以拦截消息,但我不记得这是如何完成的。我认为我想到的示例涉及在客户端压缩消息的某些部分并在服务器上进行反向压缩,即使在我的场景中,我想存储而不是更改消息。
感谢收到任何提示和帮助。
(我已经部分实现了 SoapExtension。我不明白 ChainStream 方法是如何工作的,而且我不确定如何通知监听器已捕获 soap 消息(因为我无法控制实例化 soap 扩展)。'
最佳答案
您在 SoapExtension 的正确轨道上。您在这里看到文档和示例了吗? http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapextension.aspx
ChainStream 的想法是让您传递将写入请求的网络流,并且您可以选择返回不同的流。因此,如果您想保存请求的副本,请返回一个 MemoryStream,Web 服务客户端会将请求写入其中,然后在 ProcessMessage 调用中,您可以从那里复制数据并将其传递给您的 UI。
关于c# - 如何拦截来自 C# 客户端 Web 代理的出站和入站 Soap 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1660759/