首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> C# 入門

ASP.NET WebMethod 六大屬性完整指南與實戰範例

     編輯:C# 入門

WebMethodAttribute 核心屬性速查表

屬性用途預設值
Description方法說明,顯示於 WSDL <documentation>空字串
EnableSession啟用 Session 狀態(需 Cookie 支援)false
MessageName多載方法別名,解決 SOAP 不支援多載問題方法名
TransactionOption交易支援等級Disabled
CacheDuration輸出快取秒數0 (不快取)
BufferResponse是否緩衝完整回應後再傳送true

各屬性深度解析與程式碼範例

1. Description - 文件化你的 API

[WebMethod(Description = "作者: ZhangSan | 功能: 回傳問候語")]
public string HelloWorld() => "Hello World";

WSDL 產出:<documentation>作者: ZhangSan | 功能: 回傳問候語</documentation>

2. EnableSession - 讓 Web Service 有狀態

private static int _counter = 0;
[WebMethod(EnableSession = true)]
public int Count() => ++_counter; // 同一 Session 內遞增

瀏覽器重新整理可見計數器遞增;不同瀏覽器/無 Cookie 則各自從 1 開始。

3. MessageName - 多載方法的別名

[WebMethod(EnableSession = true, MessageName = "CountInt")]
public int Count(int delta) {
    _counter += delta;
    return _counter;
}
  • 用戶端呼叫 Count() → 無參數版
  • 用戶端呼叫 CountInt() → 有參數版

4. TransactionOption - 交易支援詳解

選項行為
Disabled不在交易中執行(預設)
NotSupported同上,但可參與外部交易?實際同 Disabled
Supported有交易則加入,無則不建立
Required必須有交易,自動建立新交易(根物件)
RequiresNew總是建立新交易

關鍵限制:ASMX 方法只能作為交易根物件,無法巢狀;需搭配 System.EnterpriseServices 及 COM+ 元件。

5. CacheDuration - 輸出快取提升效能

[WebMethod(CacheDuration = 30)]
public string GetServerTime() => DateTime.Now.ToString("HH:mm:ss");

30 秒內重複呼叫直接回傳快取結果,不執行方法本體。適合靜態/半靜態資料(如產品目錄、匯率)。

6. BufferResponse - 串流式回應

[WebMethod(BufferResponse = false)]
public void StreamLargeData() {
    for (int i = 0; i < 100; i++) {
        Context.Response.Write($"Chunk {i}
"); Context.Response.Flush(); // 立即推送給用戶端 Thread.Sleep(100); } }
  • true (預設):完整緩衝後一次傳送,適合小量資料。
  • false:啟用 Chunked Transfer,適合大量資料、即時報表、長時間運算進度回報。

最佳實踐建議

  • 公開 API 必填 Description,方便用戶端開發人員理解。
  • 需 Session 狀態時務必設 EnableSession=true,並確認用戶端支援 Cookie。
  • 多載方法一定要加 MessageName,否則 WSDL 產生失敗。
  • 資料庫寫入操作考慮 TransactionOption.Required 確保一致性。
  • 高頻唯讀查詢加 CacheDuration 大幅降低資料庫負載。
  • 大檔案/串流下載設 BufferResponse=false 避免記憶體暴增。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved