什麼是WCF Windows Communication Foundation(WCF)是由微軟開發的一系列支持數據通信的應用程式框架,可以翻譯為Windows 通訊開發平臺。 整合了原有的windows通訊的 .net Remoting,WebService,Socket的機制,並融合有Http和 ...
什麼是WCF
Windows Communication Foundation(WCF)是由微軟開發的一系列支持數據通信的應用程式框架,可以翻譯為Windows 通訊開發平臺。
整合了原有的windows通訊的 .net Remoting,WebService,Socket的機制,並融合有Http和Ftp的相關技術。WCF是對這些技術的統一
根據MSDN上的定義:WCF為.NetFramework 提供了一個基礎,使其能夠編寫代碼,以在組件、應用程式、系統之間進行通信。WCF的設計遵循的是面向服務的原則。服務是指可以通過消息與之進行交互的一段代碼。服務是被動的。它們等待傳入消息之後才開始工作。客戶端是發起者,客戶端將消息發送給服務來請求工作。
是Windows平臺上開發分散式應用最佳的實踐方式。
假定我們要為一家汽車租賃公司開發一個新的應用程式,用於租車預約服務。該租車預約服務會被多個應用程式訪問,包括:呼叫中心(Call Center),基於J2EE的租車預約服務以及合作伙伴的應用程式(Partner Application)
使用WCF,該解決方案的實現就容易多了。如圖中所示,WCF可用於前述所有情況。因此,租車預定應用程式使用這一種技術就可以實現其所有應用程式間的通信。
WCF可使用Web服務進行通信,因此與同樣支持SOAP的其他平臺(例如基於J2EE的主流應用程式伺服器)間的互操作性就變得簡單明瞭。
還可以對WCF進行配置和擴展,以便與使用並非基於SOAP的消息的Web服務進行通信。
性能是大多數業務中至關重要的考慮事項。開發WCF的目標就是要使之成為Microsoft所開發的速度最快的分散式應用程式平臺之一。
WCF是提供統一的,可用於建立安全、可靠的面向服務的應用的高效開發平臺。
WCF具有如下的優勢:
1、統一性
2、互操作性
3、安全與可信賴
4、相容性
理解面向服務(Service-Oriented-Architecture)
SOA是指為瞭解決在Internet環境下業務集成的需要,通過連接能完成特定任務的獨立功能實體實現的一種軟體系統架構。SOA是一個組件模型,它將應用程式的不同功能單元(稱為服務)通過這些服務之間定義良好的介面和契約聯繫起來。
SOA指出當前系統應該足夠靈活,從而允許在不打亂當前成功運行的體繫結構和基礎結構的前提下,改動已有的體繫結構。
SOA原則:
- 邊界清晰
- 服務自治
- 相容性基於策略
- 共用模式(schma)和契約
WCF體系架構簡介
契約與說明
契約定義消息系統的各個方面。
數據契約:服務中的參數;
消息契約:使用SOAP協議特定的消息部分;
服務契約:服務中的方法;
策略與綁定:策略設置安全或其他條件,綁定指定傳輸方式與編碼。
服務運行時
服務運行期間的行為控制
限制行為:控制處理的消息數;
錯誤行為:出現內部錯誤時所處理的操作;
元數據行為:是否向外提供元數據及元數據的提供方式;
實例行為:可運行的服務實例數目;
事務行為:處理事務;
調度行為:控制WCF處理消息的方式;
消息傳遞
消息傳遞層:說明數據的交換格式和傳輸模式。
消息傳遞層由通道(通道)組成,通道是對消息進行處理的組件,負責以一致的方式對消息進行整理和傳送。通道用於傳輸層、協議層、及消息獲取。各層次的通道組成了通道棧。
通道對消息和消息頭進行操作,服務運行時對消息正文進行操作。
兩種類型:傳輸通道 與 協議通道。
傳輸通道:讀取和寫入來自網路的消息,傳輸通道通過編碼器將消息轉換為網路傳輸使用的位元組流,以及將位元組流轉換為消息。傳輸通道示例如:HTTP通道、命名管道、TCP、MSMQ等;
協議通道:通過讀取或寫入消息頭的方式來實現消息協議,協議通道示例如:WS-Security,WS-Reliability。
承載和激活
服務宿主: 負責WCF服務的生命周期和上下文的操作系統進程,負責啟動和停止WCF服務,並提供控制服務的基本管理功能。
WCF基礎概念介紹
契約(Contract)
WCF 的基本概念是以合約(Contract)來定義雙方溝通的協議,合約必須要以介面的方式來體現,而實際的服務代碼必須要由這些合約介面派生並實現。合約分成了四種:
數據合約 (Data Contract),訂定雙方溝通時的數據格式。服務合約 (Service Contract),訂定服務的定義。操作合約 (Operation Contract),訂定服務提供的方法。消息合約 (MessageContract),訂定在通信期間改寫消息內容的規範。一個 WCF中的合約,就如同下列代碼所示:
[csharp] view plain copy- 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,Named Pipe,MSMQ,Peer-To-Peer TCP等協議,而 HTTP 又分為基本 HTTP 支持 (BasicHttpBinding)以及 WS-HTTP 支持 (WsHttpBinding),而 TCP亦支持 NetTcpBinding,NetPeerTcpBinding等通信方式,因此,雙方必須要統一通信的協議,並且也要在編碼以及格式上要有所一致。
一個設置通信協議綁定的示例如下:
[html] view plain copy- <?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.NETXML Web Services不同,因此有部分技術文章中,會將 ASP.NET 的 XML Web Services稱為 ASMX Service。
WCF 的服務可以掛載於 Console Application,WindowsApplication,IIS (ASP.NET) Application,Windows Service以及 Windows Activation Services中,但大多都會掛在 Windows Service。
主要的系統內置綁定:
系統綁定支持的功能:
各種綁定方式的性能比較:
終結點
–終結點是用來發送或 接收消息(或執行這兩種操作)的構造。終結點包括一個定義消息可以發送到的目的地的位置(地址)結點,包括一個定義消息可以發送到的目的地的位置(地 址)、一個描述消息應如何發送的通信機制規範(綁定)以及對於可以在該位置發送或接收(或兩者皆可)的一組消息的定義(服務協定)—該定義還描述了可以發送何種消息。
終結點的地址由EndpointAddress 類表示,該類包含一個表示服務地址的統一資源定位符(URI),大多數傳輸的地址URI 包含四個部分。
例如,
“http://www.cnblogs.com:80/jiekzou”這個URI 具有以下四個部分:
– 方案:http:
– 電腦:www.cnblogs.com
– (可選)埠:80
– 路徑:/jiekzou
元數據
所謂的“元數據”就是描述數據的數據,即描述當前服務有哪些服務契約、方法契約和數據契約以及終結點的信息。而“元數據終結點”就是向外界暴露元數據的終結點。當客戶端添加WCF服務引用的時候,會首先通過元數據取得伺服器端的契約信息、終結點信息,然後根據這些信息在客戶端創建了代理類,我們在客戶端調用WCF服務的過程實際上就是通過代理類調用WCF服務的過程。
宿主(Host):一種應用程式域和進程,服務將在該環境中運行。
WCF和Webservice的區別
1.WebService:嚴格來說是行業標準,不是技術,使用XML擴展標記語言來表示數據(這個是跨語言和平臺的關鍵)。微軟的Web服務實現稱為ASP.NET Web Service.它使用Soap簡單對象訪問協議來實現分散式環境里應用程式之間的數據交互。
WSDL來實現服務介面相關的描述。此外Webservices可以註冊到UDDI中心.供其客戶查找使用。後來微軟做了ASP.NET Web Service的安全,性能,數據加密、解密,托管宿主等多方面的擴展,稱為WSE系列,這個是過度產品,最高到WSE3.0.後來就是WCF時代。
2.WCF:其實一定程度上就是ASP.NET WebService,因為它支持Web Service的行業標準和核心協議,因此ASP.NET WebService和WSE能做的事情,它幾乎都能勝任,跨平臺和語言更不是問題(數據也支持XML格式化,而且提供了自己的格式化器)。