WCF學習筆記(一):WCF簡介

技術小胖子發表於2017-11-09

MSDN上關於WCF給出如下註解:

設計 Windows Communication Foundation (WCF) 的目的是為分散式計算提供可管理的方法,提供廣泛的互操作性,併為服務定位提供直接的支援。 

說的很清楚,同一管理分散式通訊,廣泛的互操作,服務定位。這是WCF出現的目的。 說到底,微軟還是想簡化開發方法,(MSMQ)、COM+、ASP.NET Web 服務這些散沙將會在齊聚WCF旗下,成為微軟的又一片統一天地。

老翁自2007年看的第一本<asp.net揭祕>就跟微軟在走,對新技術也算的上是痴迷,然而工作繁忙,最近賦閒在家,可以好好看看WCF這位少俠了。 

 總覽:

兩個應用程式之間的通訊有很多種方式,比如,我們可以使用XML與Webservice通訊,使用訊息與MSMQ互通,使用XML或二進位制流與.NetRemoting通訊等等。但是如果一個應用程式需要同時使用這幾種來完成功能的話將給維護帶來相當大的麻煩,WCF的出現則統一了這種局面,WCF 通過一種面向服務的新型程式設計模型簡化了關聯應用程式的開發。通過提供分層的體系結構,WCF 支援多種風格的分散式應用程式開發。 WCF 通道體系結構在底層提供了非同步的非型別化訊息傳遞基元。 而建立在此基礎之上的是用於進行安全可靠的事務處理資料交換的各種協議功能,以及廣泛的傳輸協議和編碼選擇。 

  

概念:

WCF的全名是:Windows Communication Foundation ,是一個執行庫和一組 API,用於建立在服務與客戶端之間傳送訊息的系統。 它使用相同的基礎結構和 API 來建立應用程式,這些應用程式可與同一計算機系統上或駐留在另一家公司內並通過 Internet 訪問的系統上的其他應用程式進行通訊。

1.訊息和終結點

WCF 建立在基於訊息的通訊這一概念基礎之上,也就是說只要應用程式能夠建模為訊息,都可以在WCF中統一表示,這樣的話就可以使用WCF提供的統一API。

訊息在終結點之間傳送。 終結點是傳送或接收訊息(或執行這兩種操作)的場所,它們定義訊息交換所需要的所有資訊。 服務公開一個或多個應用程式終結點(以及零個或更多個基礎結構終結點),而客戶端生成一個與服務的其中一個終結點相容的終結點。

“終結點”以基於標準的方式描述訊息應傳送到的位置、訊息應如何傳送以及訊息應具有的形式。 服務可以將這些資訊作為後設資料加以公開,而客戶端可以處理這些後設資料以生成適當的 WCF 客戶端和通訊堆疊。

2.通訊協議

通訊堆疊的一個必要元素是傳輸協議。 可以使用常用傳輸協議(如 HTTP 和 TCP)通過 Intranet 和 Internet 傳送訊息。 也可以使用其他支援與 Microsoft 訊息佇列 (MSMQ) 應用程式和對等網路網格上的節點進行通訊的傳輸協議。 使用 WCF 的內建擴充套件點可以新增更多傳輸機制。

通訊堆疊中的另一個必要元素是指定如何將任意給定訊息格式化的編碼。WCF 提供了下列編碼:

  • 文字編碼,一種可互操作的編碼。

  • 訊息傳輸優化機制 (MTOM) 編碼,該編碼是一種可互操作的方法,用於高效地將非結構化二進位制資料傳送到服務或從服務接收這些資料。

  • 用於實現高效傳輸的二進位制編碼。

使用 WCF 的內建擴充套件點可以新增更多編碼機制(如壓縮編碼)。

3.訊息模式

WCF 支援多種訊息模式,包括請求-回覆、單向和雙工通訊。 不同傳輸協議支援不同的訊息模式,因而會影響它們所支援的互動型別。 WCF API 和執行庫還能幫助您安全而可靠地傳送訊息。

其他相關術語

訊息

訊息是一個獨立的資料單元,它可能由幾個部分組成,包括訊息正文和訊息頭。

服務

服務是一個構造,它公開一個或多個終結點,其中每個終結點都公開一個或多個服務操作。

終結點

終結點是用來傳送或接收訊息(或執行這兩種操作)的構造。 終結點包括一個定義訊息可以傳送到的目的地的位置(地址)、一個描述訊息應如何傳送的通訊機制規範(繫結)以及對於可以在該位置傳送或接收(或兩者皆可)的一組訊息的定義(服務協定)— 該定義還描述了可以傳送何種訊息。WCF 服務作為一個終結點集合向外界公開。

應用程式終結點

一個終結點,由應用程式公開並對應於該應用程式實現的服務協定。

基礎結構終結點

一個終結點,由基礎結構公開,以便實現與服務協定無關的服務需要或提供的功能。 例如,服務可能擁有一個提供後設資料資訊的基礎結構終結點。

地址

地址指定接收訊息的位置。 地址以統一資源識別符號 (URI) 的形式指定。 URI 架構部分指定用於到達該地址的傳輸機制,如 HTTP 和 TCP。 URI 的層次結構部分包含一個唯一的位置,其格式取決於傳輸機制。

使用終結點地址可以為服務中的每個終結點建立唯一的終結點地址,或者在某些特定條件下在終結點之間共享一個地址。 繫結

繫結定義終結點與外界進行通訊的方式。 它由一組稱為繫結元素的要素構造而成,這些元素“堆疊”在一起以形成通訊基礎結構。 繫結最起碼應定義傳輸協議(如 HTTP 或 TCP)和所使用的編碼(如文字或二進位制)。

繫結元素

繫結元素表示繫結的特定部分,如傳輸協議、編碼、基礎結構級協議(如 WS-ReliableMessaging)的實現以及通訊堆疊的其他任何要素。

行為

行為是控制服務、終結點、特定操作或客戶端的各種執行時方面的要素。 行為按照範圍進行分組:常見行為在全域性範圍內影響所有終結點,服務行為僅影響與服務相關的方面,終結點行為僅影響與終結點相關的屬性,操作級行為影響特定操作。 例如,有一種服務行為是遏制,它指定當過多的訊息可能超出服務的處理能力時,服務應該如何反應。 另一方面,終結點行為僅控制與終結點相關的方面,如查詢安全憑據的方式和位置。

系統提供的繫結

WCF 包含許多系統提供的繫結。 這些繫結是針對特定方案進行優化的繫結元素的集合。 例如,WSHttpBinding 是為了與實現各種 WS* 規範的服務進行互操作而專門設計的。 通過僅提供那些可以正確應用於特定方案的選項,這些預定義的繫結可以節省時間。 如果預定義的繫結不能滿足您的要求,則可以建立您自己的自定義繫結。

配置與編碼

可以通過編碼、配置或將兩者結合在一起來完成對應用程式的控制。 配置的優點在於,它使除開發人員以外的其他人員(如網路管理員)可以在程式碼編寫完成後對客戶端和服務引數進行設定,而不必重新編譯。 使用配置不僅可以設定值(如終結點地址),還可以通過新增終結點、繫結和行為來實施進一步的控制。 使用編碼,開發人員可以保持對服務或客戶端的所有元件的嚴格控制,而且可以對通過配置完成的所有設定進行檢查,並根據需要通過程式碼進行重寫。

服務操作

服務操作是在服務的程式碼中定義的過程,用於實現某種操作的功能。 此操作作為一個 WCF 客戶端上的方法向客戶端公開。 該方法可能返回一個值,並可能採用數量可選的引數,或是不採用任何引數且不返回任何響應。 例如,一個實現簡單的“Hello”的操作可以用作客戶端存在通知,並可以開始一系列操作。

服務協定

服務協定將多個相關的操作聯絡在一起,組成單個功能單元。 協定可以定義服務級設定,如服務的名稱空間、對應的回撥協定以及其他此類設定。 在大多數情況下,協定是通過用您所選的程式語言建立一個介面並將 ServiceContractAttribute 屬性應用於該介面來定義的。 通過實現該介面,可生成實際的服務程式碼。

操作協定

操作協定定義引數並返回操作的型別。 在建立定義服務協定的介面時,可以通過將 OperationContractAttribute 屬性應用於協定中包含的每個方法定義來表示一個操作協定。 可以將操作建模為採用單個訊息作為引數並返回單個訊息,或者建模為採用一組型別作為引數並返回一個型別。 在後一種情況下,系統將確定需要為該操作交換的訊息的格式。

訊息協定

訊息協定描述訊息的格式。 例如,它會宣告訊息元素應包含在訊息頭中還是包含在訊息正文中,應該對訊息的何種元素應用何種級別的安全,等等。

錯誤協定

可以將錯誤協定與服務操作進行關聯,以指示可能返回到呼叫方的錯誤。 一個操作可能具有零個或更多個與其相關聯的錯誤。 這些錯誤是在程式設計模型中建模為異常的 SOAP 錯誤。

資料協定

服務使用的資料型別必須在後設資料中進行描述,以使其他各方可以與該服務進行互動操作。 資料型別的說明稱為資料協定,而這些型別可以在訊息的任何部分使用(例如,作為引數或返回型別)。 如果服務僅使用簡單型別,則無需顯式使用資料協定。

宿主

服務必須承載於某個程式中。 “宿主”是控制服務的生存期的應用程式。 服務可以是自承載的,也可以由現有的宿主程式進行管理。

自承載服務

自承載服務是在開發人員建立的程式應用程式中執行的服務。 開發人員控制服務的生存期、設定服務的屬性、開啟服務(這會將服務設定為偵聽模式)以及關閉服務。

宿主程式

宿主程式是專為承載服務而設計的應用程式。 這些宿主程式包括 Internet 資訊服務 (IIS)、Windows 啟用服務 (WAS) 和 Windows 服務。 在這些宿主方案中,由宿主控制服務的生存期。 例如,使用 IIS 可以設定包含服務程式集和配置檔案的虛擬目錄。 在收到訊息時,IIS 將啟動服務並控制服務的生存期。

例項化

服務具有一個例項化模型。 有三種例項化模型:“單個”,在這種模型中,由單個 CLR 物件為所有客戶端提供服務;“每個呼叫”,在這種模型中,將建立一個新的 CLR 物件來處理每個客戶端呼叫;“每個會話”,在這種模型中,將建立一組 CLR 物件,並且為每個獨立的會話使用一個物件。 例項化模型的選擇取決於應用程式要求和服務的預期使用模式。

客戶端應用程式

客戶端應用程式是與一個或多個終結點交換訊息的程式。 客戶端應用程式通過建立一個 WCF 客戶端例項並呼叫該 WCF 客戶端的方法來開始工作。 需要注意的是,單個應用程式既可以充當客戶端,也可以充當服務。

通道

通道是繫結元素的具體實現。 繫結表示配置,而通道是與該配置相關聯的實現。 因此,每個繫結元素都有一個相關聯的通道。 通道堆疊在一起以形成繫結的具體實現:通道堆疊。

WCF 客戶端

WCF 客戶端是一個將服務操作作為方法公開的客戶端應用程式構造(用您所選的 .NET Framework 程式語言編寫,如 Visual Basic 或 Visual C#)。 任何應用程式都可以承載 WCF 客戶端,包括承載服務的應用程式。 因此,可以建立一個包含其他服務的 WCF 客戶端的服務。

通過使用 ServiceModel Metadata Utility Tool (Svcutil.exe) 並使其指向正在執行的釋出後設資料的服務,可以自動生成 WCF 客戶端。

後設資料

服務的後設資料描述服務的特徵,外部實體需要了解這些特徵以便與該服務進行通訊。 ServiceModel Metadata Utility Tool (Svcutil.exe) 可以使用後設資料生成 WCF 客戶端以及客戶端應用程式可用來與服務進行互動的伴隨配置。

服務所公開的後設資料包括 XML 架構文件(用於定義服務的資料協定)和 WSDL 文件(用於描述服務的方法)。

啟用後設資料後,WCF 通過檢查服務及其終結點自動生成服務的後設資料。 若要釋出服務的後設資料,必須顯式啟用後設資料行為。

安全

WCF 中的安全包括保密性(為防止偷聽而進行的訊息加密)、完整性(用於檢測對訊息所做篡改的方法)、身份驗證(用於驗證伺服器和客戶端的方法)以及授權(資源訪問控制)。 通過利用現有安全機制(如 TLS over HTTP,也稱為 HTTPS)或通過實現各種 WS-* 安全規範中的一個或多個規範,可以提供這些功能。

傳輸安全模式

可以通過以下三種模式之一來保證安全:傳輸模式、訊息安全模式和使用訊息憑據的傳輸模式。 傳輸安全模式指定由傳輸層機制(如 HTTPS)提供保密性、完整性和身份驗證。 在使用像 HTTPS 這樣的傳輸協議時,此模式的優點在於效能出色,而且由於它在 Internet 上非常流行,因此很容易理解。 其缺點在於,這種安全分別應用於通訊路徑中的每個躍點,這使得通訊容易遭受“中間人”攻擊。

訊息安全模式

訊息安全模式指定通過實現一個或多個安全規範來保證安全,如名為“Web Services Security: SOAP Message Security”(Web 服務安全:SOAP 訊息安全)的規範(可在 http://go.microsoft.com/fwlink/?LinkId=94684 獲得)。 每個訊息都包含必要的安全機制,用於在訊息傳輸過程中保證安全,並使接收方能夠檢測到篡改和對訊息進行解密。 從這種意義上說,安全被封裝在每個訊息中,從而提供了跨多個躍點的端到端安全。 由於安全資訊成為訊息的一部分,因此可以在訊息中包含多種憑據(這些憑據稱為“宣告”)。 這種方法還具有這樣一個優點,即使得訊息可以通過任意傳輸(包括在其起點和終點之間的多個傳輸)安全地傳送。 這種方法的缺點在於所使用的加密機制具有較高的複雜性,從而使效能受到影響。

使用訊息憑據的傳輸安全模式

此模式使用傳輸層來提供訊息的保密性、身份驗證和完整性,並且每個訊息都可以包含訊息接收方所要求的多個憑據(宣告)。

WS-*

一組不斷增加的、在 WCF 中予以實現的 Web 服務 (WS) 規範(如 WS-Security、WS-ReliableMessaging 等)的簡寫。

    本文轉自wengyuli 51CTO部落格,原文連結:http://blog.51cto.com/wengyuli/588600

,如需轉載請自行聯絡原作者


相關文章