Web Service 是 .NET 策略核心,讓程式碼跨越機器邊界,透過 HTTP/SOAP 呼叫遠端方法如同呼叫本地函數。本文以 VS.NET 逐步示範:建立 ASMX 服務、測試頁面操作、Windows Forms 客戶端加入 Web 參考並呼叫,涵蓋純量參數、陣列、自訂類別與巢狀類別傳遞細節。
MyFirstWS。Service1.asmx,取消註解 HelloWorld:
[WebMethod]
public string HelloWorld() { return "Hello World"; }
HelloWorld → Invoke,回傳 XML:<string>Hello World</string>。
[WebMethod]
public string HelloWorld(string strInput) {
return strInput + " Hello World";
}
strInput,呼叫後正確回傳串接字串。
[WebMethod]
public string HelloWorld(string[] str) {
return str[0] + " Hello World";
}
Test forms are only available for methods with non-array primitive types as parameters。localhost。
localhost.Service1 svc = new localhost.Service1();
string[] input = { "Nfs is the best" };
string result = svc.HelloWorld(input); // 回傳 "Nfs is the best Hello World"
public class Foo {
public Foo() { } // 必須有無參數公開建構函數
public Foo(int x) { str = new string[x]; }
public string[] str; // 公開欄位/屬性才會序列化
}
[WebMethod]
public string HelloWorld(Foo foo) {
for (int i=0; i<foo.str.Length; i++) foo.str[i] += " Hello World" + i;
return "OK";
}
public Foo() 會報錯:cannot be serialized because it does not have a default public constructor。Foo.HiddenOrNot 若不出現在 WebMethod 簽章中,客戶端 Proxy 類別不會產生;加入參數後 Update Web Reference 即可見。DataSet、XmlNode 或自訂可序列化類別(標記 [Serializable])。BeginHelloWorld/EndHelloWorld,配合回呼避免 UI 凍結。Web Service 讓異構系統整合變得前所未有的簡單,掌握參數序列化規則與 Proxy 更新機制,即可輕鬆跨越網路邊界共享業務邏輯。