[Develop]Lab8-InvokeWS

[Develop]Lab8-InvokeWS

Lab8 、 Invoke Web Service

這個範例,我們來介紹 WWF 中的叫用Web Service 元件的用法。在跨組織間的資料交換,越來越多的情況都是使用Web
Service。

Maybe Web Service 確實有效能上的一些因素要考量,但是它 follow了XML的標準、也定義了傳遞之間的通訊協定(
SOAP )、也支援憑證

的Function、描述給程式看懂這隻服務的WSDL、在跨組織間以80 Port穿越防火牆(當然你若要走SSL通道就要穿越443Port)….等等。

都讓他具備成為跨組織間資料傳遞方案的可選擇方案之一。其實方案還是很多‧但是無論用任何方案你終究還是會遇到資料格式定義

的或是網路上傳輸資料的安全性…等等的問題 。假設WS效能是你考量的很重要因素,如果換另一種協定來交換資料,似乎好像還是

要遇到這皆問題;不是嗎 ?


開啟WWF專案前先介紹要被叫用的
Web Service。

我們自己用.Net 撰寫了一個 Web Service。( 假如你不會用 .Net 寫 Web Service 的話,你可以參考前面 SOA
& Webservice 裡面的 .Net WS

教學範例 )。 這個WS我架在IIS下的,網址是 http://localhost/lab1_HelloWorld/Service.asmx
。這個網址是用來給應用程式呼叫的 WS 的

位址。這個 Web Service 裡面有一個服務,叫做 HelloWorld!

clip_image001

看到這個 HelloWorld 服務的內容,它是一個接收使用者傳入 UserName 後,會回傳給你一個 Username + HelloWorld
字串的服務。

clip_image002

參考結果!!

clip_image003


開啟一個新的WWF專案。

這個範例中我們要使用的是 [ 循序工作流程主控台應用程式 ] 。檔案名稱我們命名為 [ Lab8_InvokeWS ] 。

clip_image004

我們在工具箱上拉出一個 [ InvokeWebService ] 到循序工作流程中。

clip_image005

這時畫面上會跳出 WebService 的設定視窗。以後會常常看到這個視窗,因為整個網站就是一直不斷的再談整合的課題。

clip_image006

我們在 URL 加入 http://localhost/lab1_HelloWorld/Service.asmx 的網址,這樣 .Net
會直接幫我們找到 WS 的位址。這個服務裡面有一個

HelloWorld 的服務。在 Web 參考名稱的部份,我們輸入 Lab8_HelloWorld( 你也可以輸入你想要的的名稱,這個動作你可以想像為

付予這個服務在你的專案裡面的名稱空間 )。

clip_image007

我們看到專案裡面被加入了一個 Web 參考了;再循序工作流程上也多了這個 [ invokeWebServiceActivity ] 的元件。

clip_image008

clip_image009

點選 [ invokeWebServiceActivity ] 的屬性視窗,我們在 MethodName 的屬行裡面選擇 [ HelloWorld
]這個服務。接著在參數屬性裡面我們

看到了兩個欄位;[ ReturnValue ] 與 [ Username ]。這是你要傳送給Web Service 的 Username
跟 Web Service 將會回傳的值。

clip_image010

點選 循序工作流程 的程式碼編輯,在這邊我們撰寫兩個變數。一個是 [ ResponseMessage ] 另一個則是 [ RequestMessage
]。

clip_image011

接著我們將 [ Username ] 屬性選擇 [ RequestMessage ]。這是當我們呼叫 Web Service 時要送給他的值。

clip_image012

clip_image013

接著在 [ RetuenValue ] 中指定 [ ResponseMessage ] 的值。這是用來接收 Web Service 回傳結果用的變數。

clip_image014

clip_image015

我們在工作循序流程中再寫兩個方法,程式碼如下。一個是用來設定值,而另一個是用來將結果列印出來的。

clip_image016

然後在 [ InvokeWebService ] 元件的屬性繼續設定 [ 處理常式 ] 部分的設定。將 Invoked 設定為剛剛寫的 WS
Invoked 的方法;

而 Invoking 則指定 WSInvoking 的方法。

clip_image017


完成測試!

完成了這個範例,我門來測試一下結果吧!!

clip_image018