WCF學習- 基礎概念

Windows Communication Foundation (WCF) 是用於構建面向服務的應用程序的框架。藉助 WCF,能夠將數據做爲異步消息從一個服務終結點發送至另外一個服務終結點。服務終結點能夠是由 IIS 承載的持續可用的服務的一部分,也能夠是應用程序中承載的服務。終結點能夠是從服務終結點請求數據的服務客戶端。簡單消息能夠是做爲 XML 發送的單個字符或單個單詞,複雜消息能夠是二進制數據流。一些示例方案包括:編程

  • 處理企業事務的安全服務。

  • 將當前數據提供給其餘服務(例如流量報告或其餘監視服務)的服務。

  • 使兩我的可以實時通訊或交換數據的聊天服務。

  • 輪詢一個或多個服務以查找數據並將其以邏輯表現形式展現出來的面板應用程序。

  • 將使用 Windows Workflow Foundation 實現的工做流做爲 WCF 服務公開。

  • 輪詢服務以查找最新數據源的 Silverlight 應用程序。

雖然在 WCF 存在以前就能夠建立此類應用程序,但 WCF 使終結點的開發比之前更容易。總之,WCF 設計提供一種用於建立 Web 服務和 Web 服務客戶端的可管理的方式。安全

WCF 基礎知識

WCF 是一個運行時和一組 API,用於建立在服務與客戶端之間發送消息的系統。它使用相同的基礎結構和 API 來建立應用程序,這些應用程序可與同一計算機系統上或駐留在另外一家公司內並經過 Internet 訪問的系統上的其餘應用程序進行通訊。服務器

消息和終結點

WCF 創建在基於消息的通訊這一律念基礎之上,能夠建模爲消息(如 HTTP 請求或消息隊列(也稱爲 MSMQ)消息)的任何內容均可以在編程模型中按照統一方式進行表示。這樣,就能夠在不一樣傳輸機制間提供一個統一的 API。網絡

該模型對「客戶端」(即啓動通訊的應用程序)和「服務」(即等待客戶端與其進行通訊並響應該通訊的應用程序)加以區分。單個應用程序既能夠充當客戶端,也能夠充當服務。有關示例,請參見雙工服務對等網絡架構

消息在終結點之間發送。終結點是發送或接收消息(或執行這兩種操做)的場所,它們定義消息交換所須要的全部信息。服務公開一個或多個應用程序終結點(以及零個或更多個基礎結構終結點),而客戶端生成一個與服務的其中一個終結點兼容的終結點。框架

「終結點」以基於標準的方式描述消息應發送到的位置、消息應如何發送以及消息應具備的形式。服務能夠將這些信息做爲元數據加以公開,而客戶端能夠處理這些元數據以生成適當的 WCF 客戶端和通訊堆棧。異步

通訊協議

通訊堆棧的一個必要元素是傳輸協議。可使用經常使用傳輸協議(如 HTTP 和 TCP)經過 Intranet 和 Internet 發送消息。也可使用其餘支持與消息隊列應用程序和對等網絡網格上的節點進行通訊的傳輸協議。使用 WCF 的內置擴展點能夠添加更多傳輸機制。編程語言

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

  • 文本編碼,一種可互操做的編碼。

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

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

使用 WCF 的內置擴展點能夠添加更多編碼機制(如壓縮編碼)。性能

消息模式

WCF 支持多種消息模式,包括請求-回覆、單向和雙工通訊。不一樣傳輸協議支持不一樣的消息模式,於是會影響它們所支持的交互類型。WCF API 和運行庫還能幫助您安全而可靠地發送消息。

WCF 術語

WCF 文檔中使用的其餘概念和術語包括:

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

 

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

 

終結點
終結點是用來發送或接收消息(或同時執行這兩種操做)的構造。終結點包括一個定義消息能夠發送到的目的地的位置(地址)、一個描述消息應如何發送的通訊機制規範(綁定),以及對能夠在該位置發送或接收(或同時執行這兩種操做)的一組消息的定義(服務協定,用於描述能夠發送哪些消息)。

 

WCF 服務做爲一個終結點集合對外公開。

 

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

 

基礎結構終結點
一個終結點,由基礎結構公開,以便實現與服務協定無關的服務須要或提供的功能。例如,服務可能擁有一個提供元數據信息的基礎結構終結點。

 

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

 

使用終結點地址能夠爲服務中的每一個終結點建立惟一的終結點地址,或者在某些條件下在終結點之間共享一個地址。下面的示例演示了一個將 HTTPS 協議和一個非默認端口結合使用的地址:

 

 
 
HTTPS://cohowinery:8005/ServiceModelSamples/CalculatorService
綁定
綁定定義終結點與外界進行通訊的方式。它由一組稱爲綁定元素的要素構造而成,這些元素「堆疊」在一塊兒以造成通訊基礎結構。綁定最起碼應定義傳輸協議(如 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 元數據實用工具 (Svcutil.exe) 並使其指向正在運行的發佈元數據的服務,能夠自動生成 WCF 客戶端。

 

元數據
服務的元數據描述服務的各類特徵,外部實體須要瞭解這些特徵以便與該服務進行通訊。 ServiceModel 元數據實用工具 (Svcutil.exe) 可使用元數據生成 WCF 客戶端以及客戶端應用程序可用來與服務進行交互的伴隨配置。

 

服務所公開的元數據包括 XML 架構文檔(用於定義服務的數據協定)和 WSDL 文檔(用於描述服務的方法)。

 

啓用元數據後,WCF 經過檢查服務及其終結點自動生成服務的元數據。若要發佈服務的元數據,必須顯式啓用元數據行爲。

 

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

 

傳輸安全模式
傳輸安全模式指定由傳輸層機制(如 HTTPS)提供保密性、完整性和身份驗證。在使用像 HTTPS 這樣的傳輸協議時,此模式的優勢在於性能出色,並且因爲它在 Internet 上很是流行,所以很容易理解。其缺點在於,這種安全分別應用於通訊路徑中的每一個躍點,這使得通訊容易遭受「中間人」攻擊。

 

消息安全模式
消息安全模式指定經過實現一個或多個安全規範來保證安全,如名爲「 Web Services Security: SOAP Message Security」(Web 服務安全:SOAP 消息安全)的規範。每一個消息都包含必要的安全機制,用於在消息傳輸過程當中保證安全,並使接收方可以檢測到篡改和對消息進行解密。從這種意義上說,安全信息包裝在每一個消息中,從而提供了跨多個躍點的端到端安全。因爲安全信息成爲消息的一部分,所以還能夠在消息中包含多種憑據(這些憑據稱爲「聲明」)。這種方法還具備這樣一個優勢,即消息能夠經過任意傳輸協議(包括在其起點和目標之間的多個傳輸協議)安全地傳送。這種方法的缺點在於所使用的加密機制較爲複雜,使性能受到影響。

 

使用消息憑據的傳輸安全模式
此模式指定使用傳輸層來提供消息的保密性、身份驗證和完整性,而且每一個消息均可以包含消息接收方所要求的多個憑據(聲明)。

 

WS-*
一組不斷增長的、在 WCF 中予以實現的 Web 服務 (WS) 規範(如 WS-Security、WS-ReliableMessaging 等)的簡寫。
相關文章
相關標籤/搜索