一、簡介
WCF是Windows Communication Foundation縮寫,是Microsoft為構建面向服務的應用提供的分布式通信編程框架,是.NET Framework 3.5的重要組成部分。使用該框架,開發人員可以構建跨平台、安全、可靠和支持事務處理的企業級互聯應用解決方案。
根據微軟官方的解釋,WCF(之前的版本名為“Indigo”)是使用托管代碼建立和運行面向服務(Service Oriented)應用程序的統一框架。它使得開發者能夠建立一個跨平台的安全、可信賴、事務性的解決方案,且能與已有系統兼容協作。WCF是微軟分布式應用程序開發的集大成者,它整合了.Net平台下所有的和分布式系統有關的技術,例如.Net Remoting、ASMX、WSE和MSMQ。以通信(Communication)范圍而論,它可以跨進程、跨機器、跨子網、企業網乃至於 Internet;以宿主程序而論,可以以ASP.NET,EXE,WPF,Windows Forms,NT Service,COM+作為宿主(Host)。WCF可以支持的協議包括TCP,HTTP,跨進程以及自定義,安全模式則包括SAML, Kerberos,X509,用戶/密碼,自定義等多種標准與模式。也就是說,在WCF框架下,開發基於SOA的分布式系統變得容易了,微軟將所有與此相關的技術要素都包含在內,掌握了WCF,就相當於掌握了叩開SOA大門的鑰匙。
WCF是.NET Framework的擴展,它提供了創建安全的、可靠的、事務服務的統一框架,WCF 整合和擴展了現有分布式系統的開發技術,如Microsoft .NET Remoting、Web Services、Web Services Enhancements (WSE)等等,來開發統一的可靠系統。WCF簡化了SOA框架的應用,同時也統一了Enterprise Services、Messaging、.NET Remoting、Web Services、WSE 等技術,極大的方便了開發人員進行WCF應用程序的開發和部署,同時也降低了WCF應用開發的復雜度。
WCF支持大量的Web Service標准,這些標准包括XML、XSD、SOAP、Xpath、WSDL等標准和規范,所以對於現有的標准,開發人員能夠方便的進行移植。同時WCF可以使用Attribute屬性進行WCF應用程序配置,提高了WCF應用的靈活性。WCF遵循客戶端/服務器模型在應用程序之間進行通信,客戶端程序能夠通過服務器端提供的EndPoint端直接訪問服務。
WCF是一個統一框架,用於創建既安全可靠又可交互的分布式事務處理應用程序。Visual Studio 的早期版本中存在一些可用於在應用程序之間進行通信的技術。 如果要以一種能夠實現從任何平台訪問信息的方式來共享信息,則應使用 Web 服務(也稱為 ASMX Web 服務)。如果只想在客戶端和正在 Windows 操作系統上運行的服務器之間移動數據,則應使用 .NET 遠程處理。如果需要事務處理通信,則應使用企業服務 (DCOM),或者如果需要排隊的模型,則應使用消息隊列(也稱為 MSMQ)。
WFC將所有這些技術的功能匯集到一個統一編程模型中。這簡化了開發分布式應用程序的過程。
二、WCF框架模型
三、WCF 編程模型
WCF 編程模型 WCF 編程模型基於以下兩個實體之間的通信:WCF 服務和 WFC 客戶端。該編程模型封裝在 .NET Framework 的 System.ServiceModel 命名空間中。
WCF 服務
WCF 服務基於一個定義服務與客戶端之間的協定的接口。它是用 ServiceContractAttribute 屬性進行標記的,如下列代碼中所示:
<ServiceContract()> _
Public Interface IService1
<OperationContract()> _
Function GetData(ByVal Value As String) As String
End Interface
通過使用 OperationContractAttribute 屬性標記 WCF 服務公開的函數和方法,可以定義這些函數和方法。另外,通過使用 DataContractAttribute 屬性標記復合類型,可以公開序列化數據。這樣可以在客戶端中進行數據綁定。 定義了接口及其方法後,會將它們封裝在一個實現該接口的類中。單一的 WCF 服務類可以實現多個服務協定。 為了使用 WCF 服務,通過通常所說的“終結點”公開了此服務。 只有使用終結點提供的方法才能與服務進行通信;您不能像訪問其他類那樣通過直接引用來訪問該服務。
終結點由地址、綁定和協定組成。地址定義服務的位置;該地址可以是 URL、FTP 地址、網絡路徑或本地路徑。綁定定義與服務通信的方法。WCF 綁定提供一個用於指定協議(如 HTTP 和 FTP)、安全機制(如 Windows 身份驗證或用戶名和密碼)和更多內容的通用模型。協定包括 WCF 服務類公開的操作。
可以針對單一的 WCF 服務公開多個終結點。這樣,不同的客戶端便可以采用不同的方法與同一服務進行通信。例如,銀行服務可以為雇員提供一個終結點,為外部客戶提供另一個終結點,每個終結點都使用不同的地址、綁定、和/或協定。
WCF 客戶端
WCF 客戶端由“代理”和終結點所組成,前者使應用程序能夠與 WCF 服務通信,後者與針對服務定義的終結點相匹配。 該代理在 app.config 文件中的客戶端上生成並包括有關服務所公開的類型和方法的信息。例如,對於公開多個終結點的服務,客戶端可以選擇最能滿足其需求的服務,以便通過 HTTP 進行通信以及使用 Windows 身份驗證(本文發布於編程入門網---www.bianceng.cn)。
創建 WCF 客戶端後,可以像引用任何其他對象那樣在代碼中引用服務。例如,若要調用之前顯示的 GetData 方法,則應編寫與下列內容相似的代碼:
Dim client As New ServiceReference.Service1Client
Dim returnString As String
returnString = client.GetData("Hello")
MsgBox(returnString)
四、Visual Studio 中的 WCF 工具
創建並測試 WCF 服務
可以使用 WCF Visual Studio 模板為基礎快速創建自己的服務。然後可以使用 WCF 服務自動主機和 WCF 測試客戶端來調試和測試此服務。通過共同使用這些工具,可以快速方便地進行調試和測試,從而縮短調試和測試周期,並且不必在早期階段提交給宿主模型。
WCF 模板
WCF Visual Studio 模板為服務開發提供一個基類結構。在“添加新項目”對話框中可以使用一些 WCF 模板。這些模板包括 WCF 服務庫項目、WCF 服務網站、和 WCF 服務項模板。 選擇模板時,將為服務協定、服務實現、以及服務配置添加文件。所有必需的屬性都已添加,同時將創建簡單的“Hello World”服務類型,且不必編寫任何代碼。當然,您將需要添加代碼以便為實際服務提供函數和方法,但是模板會提供基礎。
WCF 服務主機
為 WCF 服務項目啟動 Visual Studio 調試程序(通過按 F5)時,將自動啟動 WCF 服務主機工具以便以本地方式承載服務。WCF 服務主機將枚舉 WCF 服務項目中的服務、加載該項目的配置、並為它所找到的每個服務實例化主機。 通過使用 WCF 服務主機,可以測試 WCF 服務,而不用在開發期間編寫額外代碼或提交給特定主機。
WCF 測試客戶端
通過使用 WCF 測試客戶端工具,可以輸入測試參數、將該輸入提交給 WCF 服務、並查看該服務發送回的響應。如果將 WCF 測試客戶端與 WCF 服務主機結合起來,會提供滿意的服務測試體驗。 按 F5 調試 WCF 服務項目時,WCF 測試客戶端將打開並顯示在配置文件中定義的服務終結點的列表。可以測試參數並啟動服務,重復此過程以連續測試和驗證您的服務。
在 Visual Studio 中訪問 WCF 服務
Visual Studio 2008 簡化了創建 WCF 客戶端的任務,同時將針對使用“添加服務引用”對話框添加的服務自動生成代理和終結點。所有必需的配置信息將添加到 app.config 文件中。大多數情況下,只需實例化該服務便可以使用此服務。 通過使用“添加服務引用”對話框,可以輸入服務的地址或搜索在解決方案中定義的服務。該對話框將返回由服務和這些服務提供的操作所組成的列表。通過使用此對話框,還可以定義用於在代碼中引用服務的命名空間。 通過使用“配置服務引用”對話框,可以自定義服務的配置。可以更改服務地址,指定訪問級別、異步行為和消息協定類型,以及配置類型重用。