首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

手把手教你在 Visual Studio .NET 建立與呼叫 Web Service:從 Hello World 到自訂類型傳遞

     編輯:關於VC++

Web Service 是 .NET 策略核心,讓程式碼跨越機器邊界,透過 HTTP/SOAP 呼叫遠端方法如同呼叫本地函數。本文以 VS.NET 逐步示範:建立 ASMX 服務、測試頁面操作、Windows Forms 客戶端加入 Web 參考並呼叫,涵蓋純量參數、陣列、自訂類別與巢狀類別傳遞細節。

1. 建立第一個 Web Service

  1. 專案類型:ASP.NET Web Service,命名 MyFirstWS。
  2. 預設產生 Service1.asmx,取消註解 HelloWorld:

[WebMethod]
public string HelloWorld() { return "Hello World"; }
  • 按 F5 執行,IE 顯示測試頁,點選 HelloWorld → Invoke,回傳 XML:<string>Hello World</string>。

2. 加入輸入參數


[WebMethod]
public string HelloWorld(string strInput) {
    return strInput + " Hello World";
}
  • 測試頁自動產生文字方塊輸入 strInput,呼叫後正確回傳串接字串。

3. 陣列參數:瀏覽器測試頁不支援,需撰寫客戶端


[WebMethod]
public string HelloWorld(string[] str) {
    return str[0] + " Hello World";
}
  • IE 測試頁顯示 Test forms are only available for methods with non-array primitive types as parameters。
  • 新增 Windows Application 專案,方案總管右鍵 Add Web Reference,輸入服務 URL,命名空間 localhost。
  • 客戶端代碼:

localhost.Service1 svc = new localhost.Service1();
string[] input = { "Nfs is the best" };
string result = svc.HelloWorld(input);  // 回傳 "Nfs is the best Hello World"

4. 自訂類別傳遞:預設建構函數與公開屬性是關鍵


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 即可見。

5. 進階提示

  • 複雜型別傳遞建議使用 DataSet、XmlNode 或自訂可序列化類別(標記 [Serializable])。
  • 非同步呼叫:Proxy 類別自動產生 BeginHelloWorld/EndHelloWorld,配合回呼避免 UI 凍結。
  • 安全性:生產環境務必啟用 HTTPS、WS-Security 或自訂 SOAP Header 驗證。

Web Service 讓異構系統整合變得前所未有的簡單,掌握參數序列化規則與 Proxy 更新機制,即可輕鬆跨越網路邊界共享業務邏輯。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved