我有一个内部企业应用程序,当前使用 10 种不同的 Web 服务。它们通过旧式的“Web 引用”而不是使用 WCF 来使用。

我遇到的问题是尝试与公司中编写我正在使用的服务的其他团队合作。我发现我需要捕获我正在发送和接收的确切 SOAP 消息。我通过创建一个扩展 SoapExtensionAttribute 的新属性来做到这一点。然后,我只需将该属性添加到生成的 Reference.cs 文件中的服务方法中。这有效,但由于两个原因而令人痛苦。首先,它是一个生成的文件,因此我在其中所做的任何操作都可以被覆盖。其次,我必须记住在签入文件之前删除该属性。

有没有更好的方法来捕获我正在发送和接收的确切 SOAP 消息?

有帮助吗?

解决方案

这似乎是一个常见问题,因为我刚刚问了它并被告知要看 这里.

您不必编辑生成的 Reference.cs. 。您可以在您的应用程序中引用该扩展 app.config.

其他提示

这是一个网络应用程序吗?

将 SoapExtension 代码放入 HTTPModule 中,并将 SOAP 信封注入 HTTPOutput 流中。

这样,当处于调试模式时,我会在页面顶部想象出类似可折叠 div 的东西,其中列出了该页面的所有 SOAP 通信。

我已经构建了一个 HTTPModule 来执行此操作,我将删除我公司的特定信息并在今天晚些时候发布这些好东西。

另外,请查看 SoapUI,它是一个方便的工具。

您可以通过创建 SoapExtention 来完成此操作。查看 本文.

我使用以下代码作为示例,展示了我如何在不久前编写的应用程序中捕获 SOAP 请求。

<System.Diagnostics.Conditional("DEBUG")> _
    Private Sub CheckHTTPRequest(ByVal functionName As String)
        Dim e As New UTF8Encoding()

        Dim bytes As Long = Me.Context.Request.InputStream.Length
        Dim stream(bytes) As Byte
        Me.Context.Request.InputStream.Seek(0, IO.SeekOrigin.Begin)
        Me.Context.Request.InputStream.Read(stream, 0, CInt(bytes))

        Dim thishttpRequest As String = e.GetString(stream)

        My.Computer.FileSystem.WriteAllText("D:\SoapRequests\" & functionName & ".xml", thishttpRequest, False)

    End Sub

像我一样设置条件属性会使编译器忽略除调试之外的所有构建类型的方法调用。

对不起VB,这是强加给我的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top