系統間低耦合一直是企業級應用整合追求的目標,SOA 面向服務架構為企業資源整合提供了指導原則。微軟在 .NET 平台推出 WCF (Windows Communication Foundation) 作為統一分散式通訊框架,整合了 Enterprise Services (COM+)、.NET Remoting、ASMX Web Service、WSE 3.0、MSMQ 等所有分散式技術。本系列「WCF 分散式開發步步為贏」將系統整理 WCF 核心觀點、特性、架構模型與入門實作,助您打穩分散式開發基礎。
WCF 全名 Windows Communication Foundation,是微軟為建構面向服務應用提供的分散式通訊程式框架,屬 .NET Framework 3.5 核心組件。開發人員可利用此框架建置跨平台、安全、可靠、支援交易的企業級互聯應用方案。
依微軟官方定義,WCF(早期代號 Indigo)是使用受控代碼建立與執行面向服務應用程式的統一框架,能建立跨平台、安全、可信賴、交易性的解決方案,並與既有系統相容協作。WCF 整合了 .NET 平台所有分散式技術:
通訊範圍涵蓋跨進程、跨機器、跨子網、企業網路至 Internet;宿主類型支援 ASP.NET、EXE、WPF、Windows Forms、NT Service、COM+;通訊協定包含 TCP、HTTP、Named Pipe、自訂協定;安全模式支援 SAML、Kerberos、X.509、UserName/Password、自訂等標準。掌握 WCF 即掌握叩開 SOA 大門的鑰匙。
SOA (Service-Oriented Architecture) 是架構模式與設計原則;Programming WCF Services 一書將 SOA 解釋為 Service-Oriented Application(面向服務應用程式),兩者不衝突,後者為採用 SOA 架構設計實作的應用程式。
各前代技術特性與 WCF 對比表(略)。
每個 WCF 服務由三大部分構成:


繫結是通訊關鍵,定義訊息傳輸協定 (HTTP、TCP、UDP、MSMQ 等) 可依需求自訂。
客戶端透過 Proxy 呼叫 WCF 服務流程:

方案三專案結構:服務類別庫、Console 宿主、Console 用戶端。
namespace WCFService
{
[ServiceContract(Namespace = "https://www.cnblogs.com/frank_xl/")]
public interface IWCFService
{
[OperationContract] string SayHello(string name);
[OperationContract] string SayHelloToUser(User user);
}
public class WCFService : IWCFService
{
public string SayHello(string name)
{
Console.WriteLine("Hello! {0}, Using string", name);
return "Hello! " + name;
}
public string SayHelloToUser(User user)
{
Console.WriteLine("Hello! {0} {1}, Using DataContract", user.FirstName, user.LastName);
return "Hello! " + user.FirstName + " " + user.LastName;
}
}
[DataContract]
public struct User
{
[DataMember] public string FirstName;
[DataMember] public string LastName;
}
}
public class WCFHost
{
static void Main(string[] args)
{
using (ServiceHost host = new ServiceHost(typeof(WCFService.WCFService)))
{
Uri httpAddress = new Uri("https://localhost:8002/WCFService");
host.AddServiceEndpoint(typeof(WCFService.IWCFService), new WSHttpBinding(), httpAddress);
host.Open();
Console.WriteLine("Host is runing! and state is {0}", host.State);
Console.Read();
}
}
}
用戶端加入服務參考後,VS 自動產生 Proxy 類別:

class WCFClient
{
static void Main(string[] args)
{
WCFServiceClient proxy = new WCFServiceClient("WSHttpBinding_IWCFService1");
Console.WriteLine(proxy.SayHello("Frank Xu Lei"));
User user = new User { FirstName = "Lei", LastName = "Frank" };
Console.WriteLine(proxy.SayHelloToUser(user));
Console.Read();
}
}
先啟動宿主:

再執行用戶端:

結果顯示簡單字串與資料契約物件呼叫均成功。
本文建立 WCF 基礎觀念、架構模型與最簡實作。系列文章將深入服務契約、資料契約、操作契約、交易、安全、訊息佇列等核心主題,並穿插與舊技術 (COM+、Remoting、MSMQ、WSE) 對比分析。作者建議 .NET 開發者若有時間,應回顧早期分散式技術,這些雖顯陳舊但仍廣泛應用,是成為企業系統整合專家的必修課。步步為營,步步為贏!
本文配套原始碼下載