Windows通訊基礎
Windows通訊基礎(英語:)是由微軟發展的一組資料通訊的應用程式開發介面,它是.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的用戶端來說,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中。