2009-11-02 40 views
2

我寫UI來測試ASMX Web服務入站SOAP消息。服務器和客戶端是.NET。客戶端代理已使用wsdl.exe生成。我如何攔截出站和C#的客戶端Web代理

我想攔截並存儲傳出和傳入的字符串表示形式SOAP由於在Web代理上調用方法而生成的消息,所以我可以向UI添加一個功能,該功能將顯示剛剛發送的消息/接收。

我依稀記得有兩對在哪裏可以可以添加代碼intecept消息擴展點,但我不記得這是怎麼做的。我想我所考慮的例子包括在客戶端壓縮一部分消息,在服務器上壓縮消息的相反部分,即使在我的情況下,我想存儲而不是修改消息。

感激地收到了任何提示和幫助。我不知道如何ChainStream方法的工作,我不知道如何通知監聽器的肥皂消息已被困(因爲我不在控制中。的實例SOAP擴展)」

回答

1

你是正確的軌道上的SoapExtension。你有沒有在這裏看到文檔和例子? http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapextension.aspx

ChainStream的思想是讓你通過請求將被寫入的網絡流,並且你可以選擇返回不同的流。因此,如果要保存請求的副本,請返回Web服務客戶端將寫入請求的MemoryStream,然後在ProcessMessage調用中,您可以將數據從那裏複製並傳遞到您的UI。

+0

謝謝,我基於我的解決方案的MSDN示例。我創建了一個封裝字典的靜態類,以存儲我的UI隨後讀取的出站和入站消息。 – IanT8 2009-11-08 11:25:54

0

我建議2個招數:

  • 繼承代理及重載的方法(有點枯燥,但你可以像在這個項目中生成代碼:http://ftwsf.codeplex.com/
  • 使用異步簽名並賦予每個我的'已完成'事件(你可以通過反射來做到這一點,以避免寫入太多的代碼)

如果您需要更多關於這些技巧的信息,請讓我知道。

0

你真的會更好的使用WCF作爲你的客戶端技術。然後您可以簡單地使用WCF消息級別的跟蹤來記錄傳入和傳出的消息。這是通過配置簡單完成的。

沒有理由,你必須使用只是因爲你使用的是ASMX服務的ASMX客戶端。

1

另一種方式來捕捉XML通過Wireshark的應用程序發送。它攔截通訊網卡。

在我的情況下,我打了一個服務,作爲他的地址的一部分字符串PIOSOS。我使用查找數據包窗口並進行搜索。

然後找到XML。

查看照片。

(我知道......這不是一種程序化的方式,但它有其價值。大聲笑)

enter image description here