小编tra*_*art的帖子

拦截来自客户端的Web服务的SOAP消息

我有一个与Web服务通信的客户端.我与之通信的类是通过wsdl.exe生成的C#类.我现在想记录所有传入和传出的消息.

到目前为止我所做的是编写一个继承自动生成的C#类的类,并重写了GetReaderForMessage方法.这样我可以或多或少地像这样访问传入的消息:

protected override XmlReader GetReaderForMessage(SoapClientMessage message, int bufferSize)
{
    System.Xml.XmlReader aReader = base.GetReaderForMessage(message, bufferSize);
    System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
    doc.Load(aReader);
    string content = doc.InnerXml.ToString();
    System.Xml.XmlReader aReader2 = System.Xml.XmlReader.Create(new System.IO.StringReader(content));

    return aReader2;
}
Run Code Online (Sandbox Code Playgroud)

显然我对这个解决方案不太满意,因为基本上我正在创建两个xml读者.一个用于读取SOAP消息的内容,另一个用于返回方法调用方.另外,我不能用GetWriterForMessage方法做同样的事情.

但也许我只是做起来太困难了.例如,是否可以直接读取SoapClientMessage对象的内容?我已经阅读了一些文章,建议我应该在这里使用SoapExtensions,但是从我能理解的情况来看,只有我创建的'客户'本身就是一个Web服务,在这种情况下它不是.

有什么建议?

c# soap web-services asmx

23
推荐指数
2
解决办法
5万
查看次数

标签 统计

asmx ×1

c# ×1

soap ×1

web-services ×1