| 屬性 | 用途 | 預設值 |
|---|---|---|
Description | 方法說明,顯示於 WSDL <documentation> | 空字串 |
EnableSession | 啟用 Session 狀態(需 Cookie 支援) | false |
MessageName | 多載方法別名,解決 SOAP 不支援多載問題 | 方法名 |
TransactionOption | 交易支援等級 | Disabled |
CacheDuration | 輸出快取秒數 | 0 (不快取) |
BufferResponse | 是否緩衝完整回應後再傳送 | true |
[WebMethod(Description = "作者: ZhangSan | 功能: 回傳問候語")]
public string HelloWorld() => "Hello World";
WSDL 產出:<documentation>作者: ZhangSan | 功能: 回傳問候語</documentation>
private static int _counter = 0;
[WebMethod(EnableSession = true)]
public int Count() => ++_counter; // 同一 Session 內遞增
瀏覽器重新整理可見計數器遞增;不同瀏覽器/無 Cookie 則各自從 1 開始。
[WebMethod(EnableSession = true, MessageName = "CountInt")]
public int Count(int delta) {
_counter += delta;
return _counter;
}
Count() → 無參數版CountInt() → 有參數版| 選項 | 行為 |
|---|---|
Disabled | 不在交易中執行(預設) |
NotSupported | 同上,但可參與外部交易?實際同 Disabled |
Supported | 有交易則加入,無則不建立 |
Required | 必須有交易,自動建立新交易(根物件) |
RequiresNew | 總是建立新交易 |
關鍵限制:ASMX 方法只能作為交易根物件,無法巢狀;需搭配 System.EnterpriseServices 及 COM+ 元件。
[WebMethod(CacheDuration = 30)]
public string GetServerTime() => DateTime.Now.ToString("HH:mm:ss");
30 秒內重複呼叫直接回傳快取結果,不執行方法本體。適合靜態/半靜態資料(如產品目錄、匯率)。
[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,適合大量資料、即時報表、長時間運算進度回報。Description,方便用戶端開發人員理解。EnableSession=true,並確認用戶端支援 Cookie。MessageName,否則 WSDL 產生失敗。TransactionOption.Required 確保一致性。CacheDuration 大幅降低資料庫負載。BufferResponse=false 避免記憶體暴增。