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

时间:2008-11-20 21:05:39

标签: c# web-services soap

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

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

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

6 个答案:

答案 0 :(得分:15)

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

Getting RAW Soap Data from a Web Reference Client running in ASP.net

虽然看起来像很多代码。

答案 1 :(得分:4)

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

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

答案 2 :(得分:2)

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

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

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

答案 3 :(得分:1)

看看SoapExtensions

他们就是你所需要的。

答案 4 :(得分:0)

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

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

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

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

答案 5 :(得分:0)

Just"。"在" localhost"之后添加端点中的地址。 像这样:

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