【问题标题】:In C#, how would I capture the SOAP used in a web service call?在 C# 中,如何捕获 Web 服务调用中使用的 SOAP?
【发布时间】:2010-09-23 08:09:13
【问题描述】:

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

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

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

【问题讨论】:

标签: c# web-services soap


【解决方案1】:

我认为您正在寻找的内容已在此问题中得到解决:

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

不过看起来代码很多。

【讨论】:

  • SoapExtension 不是理想的解决方案(需要管理状态,影响所有的肥皂调用,而不仅仅是您想要记录的那些),但它确实有效。谢谢!
【解决方案2】:

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

我今天早上刚刚用这个来做几乎同样的事情。我必须证明我的网络服务发送的数据没有搞砸。

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

      看看SoapExtensions

      它们是你所需要的。

      【讨论】:

        【解决方案5】:

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

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

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

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

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-12-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多