Random Service !! ตั้งชื่อแบบนี้ ผู้อ่านอาจจะนึกว่าผมจะสร้าง App อะไรประหลาดๆ ขึ้นมาหรือเปล่า… ไม่ใช่นะครับผม ;)
สำหรับตัวอย่างนี้ จะเป็นการใช้เรียกงาน WCF บน Windows Phone 7 Developer โดยผมจะทำการสร้าง WCF Service อย่างง่ายๆ ขึ้นมา เพื่อใช้ในการ Random ตัวเลขชนิด integer และ Return ค่าให้กับ Requester ของเรา (WP7)
แล้วเราควรจะเริ่มกันตรงไหนดี ?
อันนี้ก็ง่ายมากครับ ก่อนอื่นเลย เราก็ต้องสร้าง Service ของเราขึ้นมาก่อน ก็ New Project กันเลยครับ
หลังจากสร้าง Project ใหม่ขึ้นมา สังเกตุที่ Solution Explorer ก็จะเห็นไฟล์ Service เเปลกๆ โผล่ขึ้นมา 2 ไฟล์ ….
สาเหตุที่เราเห็นว่ามันเเปลก นั่นเป็นเพราะใน web service เราจะสร้างโค้ดขึ้นในไฟล์ Service.cs ไฟล์เดียวเท่านั้น และระบุ Interface ให้มันด้วยวิธีเติม [WebMethod] ไว้บนฟังชั่นที่เราสร้าง
ถ้าผมต้องการเขียนฟังชั่นชื่อ GetRandom() ให้ Return Random.Next() ตั้งแต่ 1 ถึง 9 ไว้ใน Web Service เราก็จะได้หน้าตาแบบนี้

โดย 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] นะครับ

โดยเราจะสังเกตุเห็นนิดนึงว่า Public class Service นั้นได้สืบทอดมาจาก IService อีกทีนึง
2. ต่อมา ก็สร้าง ServiceContract ขึ้นมา(IService.cs) เพื่อใช้เป็น Interface Class ในการอธิบายว่า เซอร์วิสที่ได้สร้างขึ้นมา มี Opertation อะไรบ้าง (จากตัวอย่างคือมี 1 Operation ชื่อ GetRandom, มี Type เป็น int และไม่มีการรับพารามิเตอร์) ซึ่ง Operation นีั้ ก็คือชื่อฟังชั่นใน Service Class นั่นเอง
เพียงแค่ 2 ขั้นตอนเราก็จะมี Service พร้อมแล้ว ให้เรา publish ขึ้น IIS หรือรันจาก Visual Studio ก็เรียบร้อยครับ เตรียม Copy Url ไว้ เราจะเอาไปใช้ Add Service Ref อย่างเคยครับ
สร้าง Requester(WP7) เรียกใช้ WCF
อธิบายหน้าตาของโปรแกรมนี้สักเล็กน้อยครับ ผมจะกดปุ่ม “Random To WCF” แล้ว WP7 จะร้องขอไปยัง WCF เพื่อให้ทำฟังชั่น GetRandom เพิ้อรับ Return ค่ากลับมาแสดงผล ตรงเครื่องหมาย “?” ( ใช้ WCF ทั้งที ให้มันทำแค่เนี้ย !! - -“ )

อย่างเคย เริ่มต้นด้วยการ Add Service Ref เข้าไปใน โปรเจค (คลิกขวาที่โปรเจค Add Service Ref เผื่อใครลืมครับ)
เมื่อเราใส่ url ของ service ลงไปแล้วกด Go ถ้าเจอ ในช่อง Service ก็จะมีชื่อ Service ที่เราสร้างไว้ขึ้นมา และจะแสดง Opertion ของ Service นั้นๆ ไว้ทางด้านขวา เราก็จัดการตั้งชื่อมันให้เรียบร้อยอย่างเคยครับที่ Namespace ด้านล่าง
หลังจากที่เรา Add Service Ref แล้ว และก็ได้ทำการแต่งหน้าตาของโปรแกรมแล้ว ต่อกันที่ Code Behine เลยครับ ดังนี้
1. สร้าง object ของ Service ขึ้นมา (อย่างเคยๆ อีกแล้ว)

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

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

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