Windows通訊基礎
Windows通訊基礎(英語:Windows Communication Foundation, WCF)是由微軟發展的一組資料通訊的應用程式開發介面,它是.NET框架的一部分,由.NET Framework 3.0開始引入,與Windows Presentation Foundation及 Windows Workflow Foundation並列為新一代Windows作業系統以及WinFX的三個重大應用程式開發類別庫。
在.NET Framework 2.0以及前版本中,微軟發展了Web Service(SOAP with HTTP communication),.NET Remoting(TCP/HTTP/Pipeline communication)以及基礎的Winsock等通訊支援,由於各個通訊方法的設計方法不同,而且彼此之間也有相互的重疊性(例如.NET Remoting可以開發SOAP, HTTP通訊),對於開發人員來說,不同的選擇會有不同的程式設計模型,而且必須要重新學習,讓開發人員在使用時有許多不便。同時,服務導向架構(Service-Oriented Architecture)也開始盛行於軟體工業中,因此微軟重新檢視了這些通訊方法,並設計了一個統一的程式開發模型,對於資料通訊提供了最基本最有彈性的支援,這就是Windows Communication Foundation。
概念
編輯WCF由於集合了幾乎由.NET Framework所提供的通訊方法,因此學習曲線比較陡峭,開發人員必須要針對各個部份的內涵做深入的了解,才能夠操控WCF來開發應用程式。
- 通訊雙方的溝通方式,由合約 (Contract)來訂定。
- 通訊雙方所遵循的通訊方法 (communication protocol),由協定繫結 (Binding)來訂定。
- 通訊期間的安全性,由雙方約定的安全性層次來訂定。
合約(Contract)
編輯WCF的基本概念是以合約(Contract)來定義雙方溝通的協定,合約必須要以介面的方式來呈現,而實際的服務程式碼必須要由這些合約介面衍生並實作。合約分成了四種:
- 資料合約(Data Contract),訂定雙方溝通時的資料格式。
- 服務合約(Service Contract),訂定服務的定義。
- 營運合約(Operation Contract),訂定服務提供的方法。
- 訊息合約(Message Contract),訂定在通訊期間覆寫訊息內容的規範。
一個WCF中的合約,就如同下列程式碼所示:
using System;
using System.ServiceModel;
namespace Microsoft.ServiceModel.Samples
{
[ServiceContract(Namespace = "http://Microsoft.ServiceModel.Samples")] // 服務合約
public interface ICalculator
{
[OperationContract] // 營運合約
double Add(double n1, double n2);
[OperationContract] // 營運合約
double Subtract(double n1, double n2);
[OperationContract] // 營運合約
double Multiply(double n1, double n2);
[OperationContract] // 營運合約
double Divide(double n1, double n2);
}
}
協定繫結(Binding)
編輯由於WCF支援了HTTP、TCP、命名管道、MSMQ、Peer-To-Peer TCP等協定,而HTTP又分為基本HTTP支援(BasicHttpBinding)以及WS-HTTP支援(WsHttpBinding),而TCP亦支援NetTcpBinding,NetPeerTcpBinding等通訊方式,因此,雙方必須要統一通訊的協定,並且也要在編碼以及格式上要有所一致。
一個設定通訊協定繫結的範例如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<!-- 設定服務繫結的資訊 -->
<services>
<service name=" CalculatorService" >
<endpoint address="" binding="wsHttpBinding" bindingConfiguration="Binding1"
contract="ICalculator" />
</service>
</services>
<!-- 設定通訊協定繫結的資訊 -->
<bindings>
<wsHttpBinding>
<binding name="Binding1">
</binding>
</wsHttpBinding>
</bindings>
</system.serviceModel>
</configuration>
雖然WCF也可以使用SOAP做通訊格式,但它和以往的ASP.NET XML Web Services不同,因此有部份技術文章中,會將ASP.NET的XML Web Services稱為ASMX Service。
WCF的服務可以掛載於Console Application,Windows Application,IIS(ASP.NET)Application,Windows Service以及Windows Activation Services中,但大多都會掛在Windows Service。
安全性層次
編輯WCF實作上已經支援了傳輸層次安全性(Transport-level security)以及訊息層次安全性(Message-level security)兩種。
使用者端
編輯對於WCF的使用者端來說,WCF服務就像是一個Web Service一樣,在Visual Studio 2008中,所有WCF服務的連接都是由使用者端的WCF Service Proxy來執行,開發人員不用花費太多心思在通訊上,而WCF Service Proxy在Visual Studio中被稱為服務參考(Service Reference)。
在Visual Studio中加入WCF的服務參考時,Visual Studio會自動幫開發人員做掉一些必要工作(例如組態建立以及產生Service Proxy等),開發人員只需要在程式碼中取用WCF Service Proxy物件即可。
參考文獻
編輯- MSDN .NET Framework Developer Center: WCF (頁面存檔備份,存於網際網路檔案館)
- MSDN Library: WCF Portal (頁面存檔備份,存於網際網路檔案館)
- 本文中的範例均來自MSDN Library: WCF Portal中。