2008-09-10 24 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,它是一個方便的工具。