Sample WP7 Access WCF (Random Service!!)

Posted 20/07/2010 01:33 by pandula

 

image

Random Service !! ตั้งชื่อแบบนี้ ผู้อ่านอาจจะนึกว่าผมจะสร้าง App อะไรประหลาดๆ ขึ้นมาหรือเปล่า… ไม่ใช่นะครับผม ;)

สำหรับตัวอย่างนี้ จะเป็นการใช้เรียกงาน WCF บน Windows Phone 7 Developer โดยผมจะทำการสร้าง WCF Service อย่างง่ายๆ  ขึ้นมา เพื่อใช้ในการ Random ตัวเลขชนิด integer และ Return ค่าให้กับ Requester ของเรา (WP7)

 

แล้วเราควรจะเริ่มกันตรงไหนดี ?

อันนี้ก็ง่ายมากครับ ก่อนอื่นเลย เราก็ต้องสร้าง Service ของเราขึ้นมาก่อน ก็ New Project กันเลยครับ

image 

หลังจากสร้าง Project ใหม่ขึ้นมา สังเกตุที่ Solution Explorer ก็จะเห็นไฟล์ Service เเปลกๆ โผล่ขึ้นมา 2 ไฟล์ ….

image 

สาเหตุที่เราเห็นว่ามันเเปลก นั่นเป็นเพราะใน web service เราจะสร้างโค้ดขึ้นในไฟล์ Service.cs ไฟล์เดียวเท่านั้น และระบุ Interface ให้มันด้วยวิธีเติม [WebMethod] ไว้บนฟังชั่นที่เราสร้าง

image 
ถ้าผมต้องการเขียนฟังชั่นชื่อ GetRandom() ให้ Return Random.Next() ตั้งแต่ 1 ถึง 9 ไว้ใน Web Service เราก็จะได้หน้าตาแบบนี้

image

โดย Web Service จะรับรู้ได้ทันทีว่า GetRandom และ HelloWorld เป็น Service เมื่อเราได้ประกาศ [WebMethod] ไว้ที่ฟังชั่นของเรา

แล้วมันต่างจาก WCF ยังไง

สำหรับใน WCF นั้น ได้มีการแยก Interface Class และ Service Class  ออกจากกัน โดย จากโครงสร้างไฟล์ที่ Visual Studio สร้างขึ้นมานั้น ในส่วนของ Interface Class จะอยู่ในไฟล์ IService.cs และ Service class จะอยู่ในไฟล์ Service.cs

ผมจะยกตัวอย่างเป็น Function Random ตัวเดิม แต่จะเอามาทำใน WCF แทนนะครับดังนี้

1. เริ่มต้นเหมือนกับการสร้าง Web Service ครับ โดยไปที่ไฟล์ Service.cs จากนั้นก็ร่ายมนคาถาสร้างฟังชั่นและ logic ของฟังชั่นที่เราต้องการ ขึ้นมา (ในภาพผมจะใช้ฟังชั่น Random ตัวเดิม)  โดยไม่ต้องไประบุ [WebMethod] นะครับ

image

โดยเราจะสังเกตุเห็นนิดนึงว่า Public class Service นั้นได้สืบทอดมาจาก IService อีกทีนึง

2. ต่อมา ก็สร้าง ServiceContract ขึ้นมา(IService.cs) เพื่อใช้เป็น Interface Class ในการอธิบายว่า เซอร์วิสที่ได้สร้างขึ้นมา มี Opertation อะไรบ้าง (จากตัวอย่างคือมี 1 Operation ชื่อ GetRandom, มี Type เป็น int และไม่มีการรับพารามิเตอร์) ซึ่ง Operation นีั้ ก็คือชื่อฟังชั่นใน Service Class นั่นเอง

image 

เพียงแค่ 2 ขั้นตอนเราก็จะมี Service พร้อมแล้ว ให้เรา publish ขึ้น IIS หรือรันจาก Visual Studio ก็เรียบร้อยครับ เตรียม Copy Url ไว้ เราจะเอาไปใช้ Add Service Ref อย่างเคยครับ

สร้าง Requester(WP7) เรียกใช้ WCF

อธิบายหน้าตาของโปรแกรมนี้สักเล็กน้อยครับ ผมจะกดปุ่ม “Random To WCF” แล้ว WP7 จะร้องขอไปยัง WCF เพื่อให้ทำฟังชั่น GetRandom เพิ้อรับ Return ค่ากลับมาแสดงผล ตรงเครื่องหมาย “?” ( ใช้ WCF ทั้งที ให้มันทำแค่เนี้ย !! - -“ )

image

อย่างเคย เริ่มต้นด้วยการ Add Service Ref เข้าไปใน โปรเจค (คลิกขวาที่โปรเจค Add Service Ref เผื่อใครลืมครับ)

image 

เมื่อเราใส่ url ของ service ลงไปแล้วกด Go ถ้าเจอ ในช่อง Service ก็จะมีชื่อ Service ที่เราสร้างไว้ขึ้นมา และจะแสดง Opertion ของ Service นั้นๆ ไว้ทางด้านขวา เราก็จัดการตั้งชื่อมันให้เรียบร้อยอย่างเคยครับที่ Namespace ด้านล่าง

หลังจากที่เรา Add Service Ref แล้ว และก็ได้ทำการแต่งหน้าตาของโปรแกรมแล้ว ต่อกันที่ Code Behine เลยครับ ดังนี้

1. สร้าง object ของ Service ขึ้นมา (อย่างเคยๆ อีกแล้ว)

image

2. ทีนี้ ต้องสังเกตุเล็กน้อยครับ ใน WCF นั้น Operation 1 ตัว จะแบ่งออกเป็น 2 ฟังชั่นย่อย คือ Async และ Completed ครับ โดยในขั้นตอนนี้เราจะสร้าง EventHandler ของ Completed ขึ้นมา

image

3. ทำการส่งค่า Result ที่ได้จาก Service ไปแสดงผล (กรณีนี้เป็นการส่ง Value ธรรมดา ไม่ได้ทำ Data Binding ไว้นะครับ เนื่องจากรับ Return มาค่าเดียว)

4. และก็จบด้วยการ Async();  โดยจะได้โค้ดทั้งหมด เป็นเช่นนี้ครับ

image

 

เป็นไงบ้างครับ อ่านถึงตรงนี้ คงจะรู้สึกว่ามันง่ายใช่ไหมล่ะครับ สำหรับในบทความนี้ยังมีส่วนที่ไม่ได้พูดถึงอีกมาก ทั้งรายละเอียดของ WCF อื่นๆ เช่น DataContract, Message Contract, Policies, Binding และอื่นๆ อีกมากมาย ที่ผู้อ่านยังสามารถต่อเติม เสริมรู้ให้กับตัวท่านเองได้ครับ บทความนี้ ได้อธิบายความแตกต่างคร่าวๆ ระหว่าง Web Service และ WCF พร้อมทั้งแสดงให้เห็นถึงการใช้งาน WCF อย่างง่ายๆ หวังว่าคงจะช่วยให้ท่านที่สนใจ ใช้เป็นพื้นฐานต่อๆไปครับ

About pandula

iPandula.net iPandula : Dev, is mind.

ร่วมให้กำลังใจนักเขียน

อ่านแล้วชอบใจ อยากให้กำลังใจกับผู้แต่งบทความนี้ ขอเชิญร่วมให้กำลังใจผ่าน Paysbuy/Paypal นะครับ ปลอดภัยเพราะทำงานผ่าน SSL และไม่มีค่าใช้จ่ายเพิ่มเติมครับ เว็บเราให้นักเขียน 100% ครับ

Comment ระบบเก่า

 

Aef_ said:

ขอบคุณมากครับ จะทดลองทำดูครับ

แต่ยังสงสัย ถ้าเราไปเรียกใช้ web service ราคาน้ำมันของปตท. จะเรียกใช้แบบนี้ได้ไหมครับ

July 20, 2010 9:48 AM
 

Varavut said:

ขอบคุณครับ

July 20, 2010 6:27 PM
 

GMz said:

อยากรู้ว่าใน WP7 ใช้อะไรเป็นฐานข้อมูลกันครับ

July 22, 2010 10:35 PM
 

pandula said:

ใช้เป็น IsolatedStorageFile ครับ ถ้าต้องการเป็น db เลยก็คงต้องหา 3rd party มาใช้ครับ

August 17, 2010 2:35 PM
 

nantcom said:

มีคน Port SQLite ลง Silverlight ครับ ลอง Search ดูกันนะ

September 18, 2010 11:53 PM
 

kumla said:

อยากรบกวนถามวิธีการ Add Service Reference ของ WCF ใน Application ที่เป็น Device คะ คือว่าเวลาคลิกขวา ที่โปรเจ็คมันมีแต่ Add Web Reference

October 12, 2010 4:39 AM
(required)  
(optional)
(required)  
Add

DisQUS Comment (ยังเอ๋อๆ อยู่)

blog comments powered by Disqus