在C#中,我如何捕获Web服务调用中使用的SOAP?

我有一个C#应用程序,它是Web服务的客户端。 我的一个要求是允许捕获我发送的SOAP,这样如果出现问题,我可以修复bug,或者certificate问题出在我正在调用的服务中。

我的WebReference代理服务类像往常一样从System.Web.Services.Protocols.SoapHttpClientProtocol派生。 如果我有一个魔杖,我会让这个基类实现一个OnPost事件,我可以处理将SOAP写入我的日志并继续。

没有像WireShark那样运行数据包嗅探器,是否有一种简单的方法可以获得这种级别的日志记录?

我认为你在寻找的是这个问题:

从在ASP.net中运行的Web引用客户端获取RAW Soap数据

虽然它看起来像很多代码。

如果应用程序在您的本地盒子上运行并且Web服务没有做任何时髦的事情,您可以使用Fiddler。 启动IE,运行Fiddler,你也会看到你的web服务调用也通过fiddler的代理。

我今天早上用这个做了差不多的事情。 我必须certificate我的网络服务发送的数据并没有搞砸。

要在fiddler中查看此流量,请使用以下代码:

 mySoapHttpClientProtocol.Url = mySoapHttpClientProtocol.Url.Replace("localhost", "localhost.fiddler"); 

否则,Visual Studio的内置Web服务器将绕过所有代理。

看看SoapExtensions 。

它们就是你所需要的。

出于某种原因,当使用Visual Studio附带的ASP.NET开发服务器时,Fiddler没有显示我的本地服务调用。 为了解决这个问题,我在运行时将Web服务Url更改为Fiddler端口,只是为了捕获SOAP消息。

您可以从立即窗口执行此操作,例如:

myservice.Url =“localhost:8888”(或者你有Fiddler的任何端口)

我使用SoapUI客户端来测试响应。

只是“。” 在“localhost”之后添加端点中的地址。 像这样: