Pages

2010年6月28日 星期一

Web Service(1)五分鐘速成

話說,打從我開寫 Blog 以來,好像就少有正經不嘴砲的文章,除了少有幾篇關於 SQL 或是關於四捨五入的教學外,對整個社會貢獻一丁點也沒有,所以我決定要塞幾篇有些教學性質的文章,已避免這裡的素質太過低落。

今天我想要來談談 Web Service,雖然說 Web Service 不是什麼高深的新技術,但是有鑑於網路上對於 Web Service 的中文實用範例過於稀少,加上大部分都是英文居多,那我就來個中文的簡易版,五分鐘教妳學會怎麼使用 Web Service。

在開始解說之前,我一定要先保證,這絕對是一篇對某些人實用,對大部分的人會無聊會打瞌睡的文章…

什麼是 Web Service?根據 Google 上面所解釋
Web Service 是一種面向服務的架構的技術,通過標準的Web協議提供服務,目的是保證不同平台的應用服務可以互操作。
有聽沒有懂?嗯… 相信我,這是正常的。因為我通常對這些官方解釋都直接跳過,直接進入實例,等寫完實例後再回頭看解釋,保證妳同醍醐灌頂,覺得那些解釋根本寫得比我還八股!我給予它白話的解釋是
Web Service 是在網路上的服務,寫程式的時候妳可以使用它回傳給妳的值來完成妳的程式。
對,就這樣,我給它的解釋不會更多,輕鬆簡單白話易了。舉個例子,今天妳有個程式需要做幣值間匯率的轉換,當然,或許妳的程式不需要這麼的精準,給它個固定匯率就可以了,可是通常這種狗屎運不會這麼多,妳要的是每天的最新匯率,這下子好了,我到底要怎樣去每天更新我程式裡的幣值匯率啊?這時候妳就需要 Web Service 了。

試想一下,不管是白天還是晚上,不管是昨天還是今天還是明天,妳就是要最當下的匯率資訊,而當這個服務存在網路上而且隨時可提供給妳,妳所需要的,只是需要時連上網路去取得這個匯率(使用 Web Service),而妳完全不需要懂這個服務背後是怎麼運作的,這樣妳的工作是不是就少了一大半了?換句話說,諸如此類的還有萬一我想取得天氣預報、取得即時新聞、取得郵遞區號、通訊錄等等,妳所需要做的,就只是上線取得這個服務,或是建立服務給他人使用而已,而今天這篇,則正是要舉個如何取得當下幣值匯率轉換來做例子。

打開妳的瀏覽器,隨便搜尋一下 asmx,妳會發現有許多可以使用的服務。.asmx 是 Web Service 的副檔名,就像是 .exe、.html 一樣。現在,在妳的瀏覽器網址列內輸入

http://www.webservicex.net/CurrencyConvertor.asmx

如果 Web Service 有正常運作,妳應該會看到以上的畫面。從畫面上妳可以知道這個 Web Service 叫做 CurrencyConvertor,裡面有個 Function 叫做 ConversionRate,還有一些解釋,大意就是這個服務是用來得到幣值與幣值之間的匯率。在開始寫程式之前,我們可以先試試看這個 Web Service 會不會動,點進入畫面的連結 ConversionRate ,然後把畫面往下拖拉到中間直到看到這個畫面

幣值可以隨意妳輸入,不過只能輸入它 List 裡面所提供的,就是畫面上洋洋灑灑看似一堆的幣值縮寫。因為下個星期我又要去香港玩了,所以我們拿港幣還有台幣來試試看。然後在 FromCurrency 內輸入 HKD,在 ToCurrency 內輸入 TWD,然後按下 Invoke。

噹噹!我們很幸運的,也很快速的在畫面上得到了以下這個值(見鬼了,港幣又漲了嗎?)

現在我們確定這個 Web Service 是上線且有在運作的,接下來,我們就來試試如何把這個 Web Service 跟我們的程式做連結。我們現在開啟 Visual Studio 2005 然後建立一個 Web Application(妳也可以使用 Window Form,只是我們這邊使用 Web Application 做例子)。

專案/網站名字可以自己取妳想要的,我這邊取名為 TEST_WebService,接著下一個步驟,就是如何引用一個 Web Service。

在工具列上選擇「網站」->「加入 Web 參考」。




然後接著把 Web Service 的所在網址輸入,我們的例子也就是剛剛我們所測試的網址,輸入 http://www.webservicex.net/CurrencyConvertor.asmx 然後按下

如果一切無誤,妳應該會看到上面那個畫面,妳可以把 Web 參考名稱換成妳想要的名字,在這裡我更名為 WS_Currency,建議妳跟我取的一樣,這樣後面妳我的名字比較不會混淆。然後按下「加入參考」按鈕。加入後,妳會發現到在妳畫面右邊的方案總管理多出了 App_WebReferences - WS_Currency。



現在到這邊,我們已經完成百分之八十的工作了,簡單吧!妳還沒敲入任何一個 code 咧!現在我們要接著完成剩下的百分之二十。打開 Default.aspx.cs,敲入以下圖片中的 Code,用圖片的原因是防止妳複製貼上,親自打一遍比較容易寄得住呀!(好吧… 其實是咔圖比較容易啦)

如果引用正確,當妳敲入 WS_Currency. 的時候,Visual Studio 的 intellisense 應該會自動帶出幾個類別,我們在這裡要選 CurrencyConvertor,也就是這個 WebService 的名稱。

或許妳會接著問,這個類別裡有這麼多的函數,我怎麼知道要使用哪個呢?其實秘密就在剛剛妳在瀏覽器裡輸入的 Web Service 網址後所出現的畫面內容裡。回顧一下,當我們輸入完 http://www.webservicex.net/CurrencyConvertor.asmx 之後,點入 ConversionRate 連結,把畫面拉到最下面,注意一下裡面有一段 XML 格式的內容,這個就包涵了我們所需要的資料。



Tag:ConversionRate 是一個函式的名稱(在一開使進入 Web Service 網頁的內容裡妳也可以見到)裡面包涵了兩個參數,分別是 FromCurrency 和 ToCurrency(還記得我們之前在網頁上所輸入的 FromCurrency 和 ToCurrency 嗎?),而 FromCurrency 和 ToCurrency 後面又接著一堆幣別代碼,那就是可輸入參數的內容值。因為這個 Web Service 已經對幣別做了定義,所以我們不能直接輸入 "HKD" 或是 "TWD",而是要使用這個類別裡所給予的 Currency 型別。照下面打就對了,我們要做的,就是把原本在網頁上所輸入的,改寫到從程式裡輸入而已。



沒多餘的廢話,重要的東西到這邊就結束了,簡單吧!接下來所得到的結果就看妳要怎麼運用了!下面就是把所得匯率 4.1178 放到 label 裡,全部的 Code 如下… 到這邊,妳應該知道一個 Web Service 是如何使用的了。



就這樣短短的三四行就可以隨時得到最新的匯率,不需要什麼高深的功夫也不需要什麼深度的知識,很簡單的妳就知道怎麼使用一個 Web Service。這篇從頭看到尾需要多少時間?不多不少五分鐘剛剛好!

因為 Web Service,從前一些程式與程式之間的跨網路合作,也開始變得可能!也因為既然是跨網路,當然也表示它也是跨平台,只要連上網,就能使用 Web Service!這也代表著如果要隨時更新異地程式與程式間的訊息,如果有 Web Service 做媒介,從前很複雜的一件事現在也可以變得很簡單,好了… 我想妳應該也快睡著了,今天就講到這裡吧… 同學們!下課~

13 回應:

Sasha 提到...

為什麼下班了我還要看到這篇文章
我想吐了....囧rz

Unknown 提到...

我還以為學理工的看到這篇應該會很興奮才對 :p

竹本語溪 提到...

嗯!!今天的雨沒有前天星期六的時候恐怖!歐!!!我路過!!(手背在背後散步走開))

Unknown 提到...

玉姐,您老慢走呀~ (在妳身後哈腰鞠躬)

杜賓 提到...

我看了第一行,就直接跳到最底下按回應進來了,我很佩服你能敲這麼多字!

HOW DO YOU DO,我記得我們老師跟我們說,不想理的你就別鳥他,想認識的就微笑就行,不用說話的。很酷吧。

你又要去香港了啊…
我真不知何時才去得成。
不是不能去,想去的地方一堆,香港排名第二十三。

gary 提到...

Dear

請問一下...在您的web services程式run起來時FromCurrency 和 ToCurrency 這兩個在畫面上有看到一些一堆幣別代碼,這個要怎麼寫才可以有這個效果.呢...

Unknown 提到...

如果你有正確的抓到 Web Service 所傳回來的內容,你應該可以很正常的看到那些幣別代碼。

Antuson 提到...

謝謝老師 這篇實在是棒呆了
我會 web service 了
我剛剛就寫出一個簡單的呢

喔耶~~~

KY 提到...

感謝版主的教學,真的讓我豁然開朗,
web service 我現在真的也會用了,
這全都要拜版主所賜啊 ^0^

那可否有個小小地要求,
就是能否再寫一篇如何建立一個簡單的 web service 網頁呢?

感激感激,造福網友勝造七級糊塗啦~
(我到底再說什麼啊)

呼叫記憶 禁止退化 提到...

實用 & 清楚, 對初學看得很有幫助^_^ 謝謝

匿名 提到...

linked here Dolabuy Balenciaga check my reference image source click over here now navigate here

peshesm 提到...

why not find out more Discover More i thought about this click over here my review here see it here

coasaez 提到...

m0t59z0e82 v7o48h8f36 x9a30n1c21 w6o02d6h31 c5u32w4h03 m4j94r7s57