.NET中的肥皂记录

时间:2020-03-05 18:50:46  来源:igfitidea点击:

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

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

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

解决方案

回答

我们可以通过创建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,它被强加给我。

回答

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

将SoapExtension代码放在​​HTTPModule中,然后将SOAP信封注入HTTPOutput流。

这样,在调试模式下,我会在页面顶部看到类似可折叠div的内容,该div列出了该页面的所有SOAP通信。

回答

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

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

回答

正如我刚问过的,这被告知要看这里,这似乎是一个常见的问题。

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