2012年9月26日 星期三

使用 Axis TCP Monitor 來監測 SOAP 訊息

使用 Axis TCP Monitor 來監測 SOAP 訊息

This document is provided as is. You are welcomed to use it for non-commercial purpose.
Written by: 國立中興大學資管系呂瑞麟
請勿轉貼


SOAP 訊息(SOAP messages)是否已經被傳送出去,或者 SOAP 訊息是否已經被接受, 或者被傳送的 SOAP 訊息的內容以及格式為何,這個時候我們就可以利用 Axis TCP Monitor 來監測 SOAP 訊息。使用 TCP Monitor 的方式很簡單,你只要 在 Axis 伺服器端,產生如下的檔案,並將其命名為 tcpmon.bat
@echo off
set TEMP=%CLASSPATH%
set CLASSPATH=%CLASSPATH%;d:\tomcat\webapps\axis\WEB-INF\lib\axis.jar;d:\tomcat\webapps\axis\WEB-INF\lib\axis-ant.jar;d:\tomcat\webapps\axis\WEB-INF\lib\commons-discovery-0.2.jar;d:\tomcat\webapps\axis\WEB-INF\lib\commons-logging-1.0.4.jar;d:\tomcat\webapps\axis\WEB-INF\lib\jaxrpc.jar;d:\tomcat\webapps\axis\WEB-INF\lib\log4j-1.2.8.jar;d:\tomcat\webapps\axis\WEB-INF\lib\saaj.jar;d:\tomcat\webapps\axis\WEB-INF\lib\wsdl4j-1.5.1.jar
java org.apache.axis.utils.tcpmon
set CLASSPATH=%TEMP%
完成後,請執行 tcpmon.bat 即可,執行後,你就可以看到如下的畫面:

在進一步說明 TCPMonitor 的使用方式之前,我們先說明 TCPMonitor 的概念: 在沒有 TCPMonitor 之前,client 會直接呼叫 service;如果 service 的名稱 為 http://mytest.com:8080/testService,那麼 client 程式必須將該服務 名稱設定在程式內。如果想利用 TCPMonitor 來監看送出以及回傳的 SOAP 訊息, client 必須先呼叫 TCPMonitor,然後由 TCPMonitor 呼叫 service;而 service 的回傳資料也會先傳給 TCPMonitor,然後再由 TCPMonitor 回傳給 client。 為了能輕易的完成上列的工作,在畫面中,我們要特別注意兩個比較重要的設定: Listen Port# 以及 Act as a Listener 的 Target Hostname 和 Target Port#。 以之前的範例來說,我們必須在 Listen Port# 的欄位任意輸入一個大於 1024 的整數, 例如 1234,而且在 Target Hostname 要設定為 mytest.com,Target Port# 要設定為 8080;如此一來,client 程式必須將服務名稱改成 http://127.0.0.1:1234/testService,然後當 TCPMonitor 接收到 client 傳來的 SOAP 訊息時,它會將該 SOAP 訊息 轉傳給 http://mytest.com:8080/testService。
假設你已經 deploy 了剛剛的 TimeService,請在 Listen Port# 輸入 1234。 由於 TimeService 服務在 localhost:8080,因此 Target Hostname 和 Target Port# 不需要修改;然後請點選 "Add" 鈕,這時候,程式會新增一個 tab, 請選擇這個 tab 開始監測 SOAP 訊息。
最後,請在瀏覽器內輸入 URL:http://localhost:1234/axis/services/TimeService?method=getTime 來觀察 TCP Monitor, 你應該可以看到類似以下的畫面:


從上述的範例,我們可以知道,雖然我們送出去的要求是到 port 1234,但是 TCP Monitor 會把它轉向 port 8080,然後 web service 執行的結果,會由 port 8080 傳回來,這時候 TCP Monitor 又會把這個訊息轉給 port 1234。 這樣子一來,不但程式可以得到服務,我們又可以經由 TCP Monitor 知道 SOAP 的訊息。

Written by: 國立中興大學資管系呂瑞麟




沒有留言:

張貼留言