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

在C#中,如何捕获web服务调用中使用的SOAP?,c#,web-services,soap,C#,Web Services,Soap,我有一个C#应用程序,它是web服务的客户端。我的一个要求是允许捕获我发送的SOAP,这样,如果有问题,我可以修复错误,或者证明问题在我调用的服务中 像往常一样,我的WebReference代理服务类源自System.Web.Services.Protocols.SoapHttpClientProtocol。如果我有一根魔杖,我会让这个基类实现一个事件OnPost,我可以处理这个事件,将SOAP写入日志并继续 除了运行像WireShark这样的数据包嗅探器外,有没有一种简单的方法可以获得这种级别

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

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


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

我认为您要寻找的是这个问题:

不过它看起来好像有很多代码。

看看


它们是您所需要的。

如果应用程序在您的本地机器上运行,而web服务没有做任何奇怪的事情,您可以使用Fiddler。启动IE,运行Fiddler,您将看到您的web服务调用也通过Fiddler的代理进行


我今天早上用这个做了几乎相同的事情。我必须证明我的web服务发送的数据没有弄乱。

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

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

myservice.Url=“localhost:8888”(或您使用Fiddler的任何端口)


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

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

mySoapHttpClientProtocol.Url = mySoapHttpClientProtocol.Url.Replace("localhost", "localhost.fiddler");
否则,Visual Studio的内置web服务器将绕过所有代理。

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

      <endpoint address="http://localhost.:8868/FEInvoice.asmx" binding="basicHttpBinding"
    bindingConfiguration="FEInvoice_Test" contract="EInvoiceIntegration.FEInvoiceSoap"
    name="FEInvoice_Test" />

SoapExtension不是理想的解决方案(需要管理状态,影响所有soap调用,而不仅仅是要记录的soap调用),但它确实有效。谢谢可能重复的