XML Web Services 是一種可程式化的實體,透過網際網路標準(XML、HTTP、SOAP、WSDL)提供應用程式邏輯功能,使異構系統能跨平台、跨語言互操作。它不追求程式碼可攜性,而是專注於資料與系統層面的互操作性,成為分散式應用的基石。
電子商務網站需計算多家貨運公司運費。各貨運商公開 XML Web Service,傳入重量、尺寸、出發/到達地、服務等級,即時回傳運費。主站整合多家報價,自動選擇最優方案。
企業各部門擁有獨立系統(ERP、CRM、HR、財務),資料形成孤島。將各系統核心功能包裝為 Web Services,再建立整合門戶或流程引擎(如 BizTalk Orchestration),實現跨系統業務流程自動化,例如:訂單建立 → 庫存扣減 → 發票開立 → 出貨通知。
B2B 交易常涉及多方、多步驟、非同步確認。BizTalk Server 提供持久化、可靠訊息傳遞、追蹤與彈性協定層,配合 XML Web Services 實現端對端業務流程編排,如採購訂單確認、出貨單簽收、付款核准等長流程。
| 特性 | ASP.NET Web Services (ASMX) | .NET Remoting |
|---|---|---|
| 互操作性 | 最高,完整支援 WSDL/SOAP/HTTP | 僅限 .NET 環境,需自訂通道/格式化器 |
| 型別保真度 | 僅支援 XML 序列化子集 | 完整 CLR 型別系統 |
| 主機選擇 | IIS (內建安全性、記錄、回收) | IIS、Windows Service、Console App |
| 通訊協定 | HTTP 僅限 | TCP、HTTP、IPC、自訂 |
| 序列化 | XmlSerializer | BinaryFormatter / SoapFormatter / 自訂 |
| 開發容易度 | 高(屬性標記即可公開) | 中(需設定通道、格式化器、租用期) |
// MathService.asmx
using System.Web.Services;
[WebService(Namespace = "https://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
public class MathService : WebService
{
[WebMethod(Description = "兩整數相加")]
public int Add(int a, int b) => a + b;
[WebMethod(Description = "計算圓面積")]
public double CircleArea(double radius) => Math.PI * radius * radius;
}
部署後,瀏覽 MathService.asmx?WSDL 即可取得服務描述文件,用戶端透過「加入 Web 參考」或 wsdl.exe 產生 Proxy 即可呼叫。
https://mycompany.com/services/v2)或新增方法而非修改現有簽名,確保向後相容。XML Web Services 以開放標準打破平台與語言壁壘,是構建企業級服務導向架構 (SOA) 的基石。ASP.NET ASMX 雖為早期技術,其核心概念(契約優先、標準互操作、鬆散耦合)延續至現代 WCF、ASP.NET Core Web API、gRPC 等框架。理解其本質與適用場景,有助於在技術選型時做出正確決策。