2008-09-10 68 views
4

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

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

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

回答

4

这似乎是一个常见问题,因为我刚才问过它,并被告知看here

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

0

我用下面的代码是一个例子,说明如何在一段时间写回的应用程序中捕获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强迫我。

+0

我不知道我会在哪里打电话给这个方法。我也在那里看到对HttpContext的引用。我正在进行网络请求调用,没有收到。或者,换句话说,我是一个正在消费别人的网络服务的人。我被要求提供我发送给他们的确切SOAP以及从他们的服务中返回给我的SOAP。 – Rob 2008-09-10 15:10:36

+0

Ahh对不起Rob,我跳到了你正在WebService方面工作的结论。 – NotMyself 2008-09-10 15:54:08

3

这是一个webapp?

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

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

2

我有一个HTTPModule已经建好了,我会去掉我公司的具体信息,并在今天晚些时候发布好东西。

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