Windows Communication Foundation (WCF) 是微軟實現的一套服務導向架構 (SOA) 標準,旨在解決傳統三層架構中客戶端與業務邏輯層緊密耦合的問題。透過服務契約、數據契約、錯誤契約與訊息契約,WCF 讓分散式應用的開發變得更加靈活且標準化。
每個 WCF 服務必須擁有唯一的端點地址,格式為 [傳輸協定]://[服務位置]。WCF 支援多種傳輸協定,包含 HTTP、TCP、對等網路、命名管道 (Named Pipes) 以及 MSMQ。例如 net.tcp://localhost:8800/Henllyee.Service 即代表透過 TCP 協定在本機 8800 連接埠存取該服務。
契約是服務與客戶端溝通的介面規範,主要分為四類:
[ServiceContract] 標記介面或類別,[OperationContract] 標記方法。[DataContract] 與 [DataMember]。[FaultContract]。[MessageContract]。namespace HenllyeeWCF.Service {
[ServiceContract(Namespace = "https://henllyee.cnblogs.com")]
public interface IHello {
[OperationContract]
string SayHello(string strName);
}
public class Hello : IHello {
public string SayHello(string strName) {
return String.Format("{0} say hello at {1}", strName, DateTime.Now.ToString());
}
}
}
WCF 服務必須在進程中託管,常見三種方式:
namespace HenllyeeWCF.Host {
class Program {
static void Main(string[] args) {
using (ServiceHost host = new ServiceHost(typeof(HenllyeeWCF.Service.Hello))) {
host.AddServiceEndpoint(
typeof(HenllyeeWCF.Service.IHello),
new NetTcpBinding(),
"net.tcp://localhost:8000/Hello");
host.Open();
Console.Read();
}
}
}
}
客戶端可透過「加入服務參考」產生 Proxy,或手動使用 ChannelFactory<T> 建立通道:
namespace HenllyeeWCF.Client {
[ServiceContract(Namespace = "https://henllyee.cnblogs.com")]
public interface IHello {
[OperationContract] string SayHello(string strName);
}
class Program {
static void Main(string[] args) {
IHello proxy = ChannelFactory<IHello>.CreateChannel(
new NetTcpBinding(),
new EndpointAddress("net.tcp://localhost:8000/Hello"));
Console.WriteLine(proxy.SayHello("Henllyee Cui"));
Console.Read();
}
}
}


掌握 ABC(Address、Binding、Contract)與託管方式,即可快速建立跨平台、高互通性的分散式服務應用。