Basic Example

    เพื่อความเข้าใจในการใช้ Web Service ผมขอเริ่มจากตัวอย่างง่ายๆ ก่อน จะได้เห็นภาพรวมในการใช้งาน เอาตัวอย่างแบบไร้สาระกันก่อนดีกว่า เป็น procedure บวกเลข เราใส่ค่าตัวเลข 2 ตัวเป็น parameters แล้วให้มันคำนวณโดยการบวกกัน แล้ว return ค่าผลลัพธ์ให้เรา เริ่มเลยดีไหมครับ

    ก่อนอื่นเราต้องสร้าง file ที่อยู่บนฝั่ง Server ก่อนนามสกุล .asmx ดังนี้ครับ

Addition.cs

<%@ WebService Language="C#" class="Addition" %>
using System;
using System.Web.Services;
public class Addition : WebService
{ 	[WebMethod] 
	public int Add(int x, int y) 
	{ 		
		return x + y;
	}
}

    Code นี้ไม่ใช่ Code C# ธรรมดานะครับ อย่าเอาไป Compile มันไม่ผ่านหรอกครับ ถ้าใครคุ้นเคยกับ ASP คงจะสังเกตเห็น tag <% %> บรรทัดนั้นแหละครับที่ไม่เหมือนกับ C# ธรรมดา และอีกบรรทัดคือ [WebMethod] ที่นำหน้า method Add() นอกนั้นจะเหมือนกับ C# ปรกติครับ เรามาดูความหมายของ Code นี้กันครับ

<%@ WebService Language="C#" class="Addition" %>

    บรรทัดนี้เป็นการบอกหัวว่า code นี้เป็น Web Service ครับ ใช้ภาษา C# และ เราจะสร้าง Web Service class ที่ชื่อ Addition

public class Addition : WebService
{ 	
}

    บรรทัดนี้เราสร้าง class ที่ชื่อว่า Addition ตามการเกริ่นนำบรรทัดแรก class นี้ต้อง Inherit มาจาก class WebService ไม่ต้องตกใจนะครับ คุณไม่จำเป็นต้องไปรู้อะไรใน WebService class หรอกครับ

WebMethod] public int Add(int x, int y) 
{ 			
}

    Method ไหนที่ต้องการให้ Client จากเครื่องอื่นมาเรียกใช้ได้ ให้ประกาศเป็น WebMethod ครับ

    เมื่อเราเข้าใจหมดแล้ว คราวนี้มาถึงตอน compile แล้วครับ เราจะ compile มันยังไงดี ก่อนอื่นเราต้องเอา file นี้ไปเก็บบน Web Server ก่อนโดยการ publish ขึ้นไป อย่าลืมนะครับว่า OS ของ Web Server นั้นต้องลง .Net Framework ไว้ด้วย มีข่าวร้ายครับ ว่า Web Server ตัวเดียวที่รองรับ .Net Framework คือ IIS เท่านั้นครับ Personal Web Server หรือยึ่ห้ออื่นไม่รองรับครับ

    OS ที่ผมใช้เป็น Windows 2000 อยู่แล้วดังนั้นมันจึงมี IIS ในตัว ผมจึงไม่ต้อง publish แค่ save file Addition.asmx ไปยัง c:\inetpub\wwwroot ก็เพียงพอแล้ว จากนั้นคุณก็เรียกมันใช้งานโดยเรียกมันเหมือนเรียก Web Page ธรรมดาโดยใช้ Browser ไปที่ี้ http://localhost/Addition.asmx คุณรู้ไหมครับ  นั่นแหละคือวิธีการ compile โปรแกรม โปรแกรมที่ compile แล้วจะไม่ถูกเก็บไว้เป็น file นะครับ มันเก็บไว้ใน cache เท่านั้น ผลลัพธ์จากการเรียกใช้เป็นดังนี้ครับ

addition.jpg (83168 bytes)

    ผลลัพธ์ที่แสดงออกมาจาก Browser จะได้เป็นดังรูปข้างบนครับ คุณอาจจะงงนิดๆ ว่าทำไมมันออกมาเป็นเหมือนที่เห็นใน Reference Manual ก็นั่นแหละครับ การเรียกใช้ตรงๆ แบบนี้มันจะแสดงวิธีใช้ครับ แสดงเป็นเอกสารสวยงาม บอกให้เสร็จสรรพว่ามี Web Service ตัวนี้มี  Method อะไรให้เรียกใช้บ้าง และในแต่ละ Method มี parameters และ return value เป็นอะไร และอาจมีรายละเอียดบอกด้วยว่า Method ต่างๆ ใช้ทำอะไรบ้าง เป็นคู่มือการใช้ Web Service นั่นเอง

    แล้วเราจะเรียกใช้ Web Service ได้อย่างไร เรามีสองวิธีครับ แบบแรกคือเขียนโปรแกรมติดต่อเอง ซึ่งก็ยุ่งยากพอสมควร กับอีกวิธีหนึ่งใช้โปรแกรมช่วยในการสร้าง code ผมเลือกวิธีที่สองครับ Microsoft เตรียม utility ตัวหนึ่งใน .Net Framework ที่ชื่อว่า webserviceutil.exe ให้เรียกใช้อยู่แล้วเรามาเรียกใช้เลยดีกว่าครับ

DOS Prompt

C:\cs>webserviceutil /pa:http://localhost/Addition.asmx?sdl /protocol:soap /out:
c:\cs\Addition.cs /command:proxy /langauge:csharp
Microsoft (R) Web Services Utility
[Microsoft .NET Framework Version 1.0.2204.21]
Copyright (C) Microsoft Corp 2000. All rights reserved.

c:\cs\Addition.cs

C:\cs>

    โปรแกรมนี้เราใส่ parameters ไปดังนี้ครับ 

    เราจะได้ผลลัพธ์เป็น file C# ครับ ผมคงไม่เอามาให้ดูเพราะไม่อยากให้คุณต้องไปสนใจมัน เอาเป็นว่าผมบอกให้ฟังว่ามันเป็น proxy class ก็คือ class ที่เหมือนกับที่ระบุใน WebService นั่นแหละครับ แต่ว่า code ของมันนั้นไม่มี มันมีแต่ code ที่ใช้ติดต่อไปยัง WebServer เพื่อเรียกใช้ Method ต่างๆ เท่านั้น แต่เราใช้มันอย่างง่ายดายครับ เราไม่ต้องสนใจเนื้อหาตรงนี้เลย เราหลับหูหลับตาคิดว่า class ที่มันสร้างขึ้นมาให้ใหม่นั้น ใช้งานได้เลย (ที่จริงมันไปเรียก code จริงๆ ใน Webserver ทำอีกทีครับ) รู้แค่นั้นก็น่าจะพอครับ

    ขั้นตอนต่อไป ให้เรา compile code Addition.cs ที่ webserviceutil.exe สร้างขึ้น โดยใช้คำสั่งดังนี้ครับ

    

DOS Prompt

C:\cs>csc /target:library /r:system.xml.serialization.dll /r:system.web.services
.dll Addition.cs
Microsoft (R) Visual C# Compiler Version 7.00.9030 [CLR version 1.00.2204.21]
Copyright (C) Microsoft Corp 2000. All rights reserved.


C:\cs>

    เรา compile เก็บเป็น Library ครับ ผลลัพธ์เป็น Addition.dll คราวนี้เรามาเขียน client กัน

add.cs

using System;
class add
{
	static void Main() 
	{
		Addition a = new Addition();
		Console.WriteLine(a.Add(7, 5));	
	}
}

     ขั้นตอนสุดท้ายเราทำการ compile โปรแกรมดังนี้ครับ

DOS Prompt

C:\cs>csc /r:addition.dll /r:system.web.services.dll add.cs
Microsoft (R) Visual C# Compiler Version 7.00.9030 [CLR version 1.00.2204.21]
Copyright (C) Microsoft Corp 2000. All rights reserved.


C:\cs>add
12

C:\cs>

    หวังว่าคงเข้าใจกันนะครับ