這篇是針對WebService的一些使用技巧
入門
MB對WebService的支持其實不是它的強項,它的長處在於MQ,MB就是基於MQ的,所謂“消息代理”,感覺就是在消息中間件基礎上增加了“代理”功能。MB的前身是MQ Integrator,所以從字面意思上來看,也是“message -> integrator -> broker”,越來越複雜的功能。據說,Websphere ESB對於java和webservice的支持更加完善,不過我也沒有用過。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
扯了那麼多,回到主題。在MB V6.0中,對WebService的支持還是比較弱的,以單純的http節點,加上程序員在compute節點中手工操作消息樹,包括對SOAP包進行封包(envelop)和解包(extract)都要自力更生,難度比較大,且不夠直觀簡練,給人感覺是MB對webservice支持不夠,不得已而爲之。到了V6.1,情況終於有了較大的改觀,MB提供專門的webservice節點了。
所以,如果你還在看《精通WMB》,那麼webservice那一章可以先放下了,去WMBT的“樣本庫”,看看webservice的教程,會發現不僅僅有專門的SOAP節點,還對IBM的WSRR也有專門的支持,甚至還提供異步的SOAP節點。因此在MB中使用webservice,第一步推薦先去學這些樣例。特別留意使用http和soap節點時,前後的compute節點的ESQL代碼的差異,體會SOAP節點的方便。
技巧
看完SOAP節點的樣例之後,會發現裏面的那個子流,其實也挺複雜的,好像不比http節點簡單
http節點
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
SOAP節點
其實,Envelope和Extract節點是MB6.1纔有的,沒有他們,http節點構造webservcie會變得很囉嗦;另外,以上的流程圖,是可以通過嚮導的方式生成的,這一點非常方便。
首先在消息集項目中,“從WSDL文件”新建一個消息定義;然後將這個WSDL文件拖到某個消息流的編輯界面中,自動彈出一個嚮導,簡單地一步步走,就能生成以上的消息流。
動態設置webservice地址
在以上生成的消息流中,HTTP節點和SOAP節點都有一個屬性,用於指定webservice的請求地址,但這是寫死在節點中的。如果要在運行過程中動態設置呢?比如根據消息內容,選擇合適的URL地址進行webservice調用。
其實很簡單,只需在SOAP或HTTP節點之前的某個compute節點中,在LocalEnvironment中設置一個相應的值即可
-
HTTP節點:
SET OutputLocalEnvironment.Destination.HTTP.RequestURL = ‘webservice地址’
-
SOAP節點:
set OutputLocalEnvironment.Destination.SOAP.Request.Transport.HTTP.WebServiceURL = ‘webservice地址’
注意,切記把compute節點的“計算方式”設置爲“消息和LocalEnvironment”,總之至少要包括LocalEnvironment,否則設置了等於沒設置,compute節點不會將LocalEnvironment往下傳
當然,以上步驟也可以在Filter、Database這些節點做,那樣就沒有Input和OutputLocalEnvironment之分了