共用方式為


基礎 Windows Communication Foundation 概念

本檔提供 Windows Communication Foundation (WCF) 架構的高階檢視。 其旨在說明重要概念及其結合方式。 如需建立 WCF 服務和用戶端最簡單版本的教學課程,請參閱 用戶入門教學課程。 若要瞭解 WCF 程式設計,請參閱 基本 WCF 程式設計

WCF 基本概念

WCF 是運行時間和一組 API,可用來建立在服務和客戶端之間傳送訊息的系統。 相同的基礎結構和 API 可用來建立與相同電腦系統或位於另一家公司之系統上之其他應用程式通訊的應用程式,並透過因特網存取。

傳訊和端點

WCF 是以訊息為基礎的通訊概念為基礎,而且任何可以模型化為訊息的專案(例如,HTTP 要求或消息佇列(也稱為 MSMQ) 訊息,都可以以統一的方式在程序設計模型中表示。 這可跨不同的傳輸機制啟用統一 API。

此模型區分客戶端,這些 用戶端是起始通訊的應用程式,以及 服務,這些是等候用戶端與其通訊並響應該通訊的應用程式。 單一應用程式可以同時作為客戶端和服務。 如需範例,請參閱雙向服務點對點網路

訊息會在端點之間傳送。 端點 是傳送或接收訊息的位置(或兩者),而且會定義訊息交換所需的所有資訊。 服務會公開一或多個應用程式端點(以及零或多個基礎結構端點),而用戶端會產生與其中一個服務端點相容的端點。

端點會以標準方式描述應該傳送訊息、應傳送訊息的方式,以及訊息的外觀。 服務可以將此資訊公開為元數據,用戶端可以處理以產生適當的 WCF 用戶端和通訊 堆疊

通訊協定

通訊堆疊的其中一個必要元素是 傳輸通訊協定。 您可以使用常見的傳輸,例如 HTTP 和 TCP,透過內部網路和因特網傳送訊息。 包含其他傳輸,可支援與對等網路網格上的消息佇列應用程式和節點通訊。 您可以使用 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 Information Services (IIS)、Windows 啟用服務(WAS)和 Windows 服務。 在這些託管案例中,主機會控制服務的存留期。 例如,使用 IIS,您可以設定一個包含服務元件和配置檔的虛擬目錄。 收到訊息時,IIS 會啟動服務並控制其存留期。

實例化
服務具有實例化模型。 有三個實例模型:「single」模式,其中單一 CLR 物件服務所有用戶端;「每次呼叫」模式,會建立新的 CLR 物件來處理每次用戶端呼叫;和「每個會話」模式,其中會建立一組 CLR 物件,每個個別會話各一個。 實例模型的選擇取決於應用程式需求和服務的預期使用模式。

用戶端應用程式
與一或多個端點交換訊息的程式。 用戶端應用程式會從建立 WCF 用戶端的實例和呼叫 WCF 用戶端的方法開始。 請務必注意,單一應用程式可以是客戶端和服務。

頻道
綁定項的具體實作。 系結代表組態,而通道是與該組態相關聯的實作。 因此,每個綁定項都有相關聯的通道。 通道彼此堆疊以創建系結的具體實作:通道堆疊。

WCF 用戶端
用戶端應用程式建構,將服務作業作為方法公開(使用您偏好的 .NET Framework 程式設計語言,例如 Visual Basic 或 Visual C#)。 任何應用程式都可以裝載 WCF 用戶端,包括裝載服務的應用程式。 因此,可以建立包含其他服務的 WCF 用戶端的服務。

可以使用 ServiceModel Metadata Utility Tool (Svcutil.exe) 自動生成 WCF 用戶端,同時將它指向正在發佈元數據的運行服務。

中繼資料
在服務中,描述外部實體需要瞭解才能與服務通訊的服務特性。 ServiceModel 元數據公用程式工具(Svcutil.exe)可以使用元數據來產生 WCF 用戶端,以及用戶端應用程式可用來與服務互動的隨附組態。

服務公開的元數據包含 XML 架構檔,這些檔會定義服務的數據合約,以及描述服務方法的 WSDL 檔。

啟用時,WCF 會自動產生服務的元數據,方法是檢查服務及其端點。 若要從服務發佈元數據,您必須明確啟用元數據行為。

安全性
在 WCF 中,包括機密性(加密訊息以防止竊聽)、完整性(偵測竄改訊息的方法)、驗證(驗證伺服器和用戶端的方法),以及授權(對資源的存取控制)。 這些函式是利用現有的安全性機制,例如 TLS over HTTP(也稱為 HTTPS),或實作一或多個各種 WS-* 安全性規格來提供。

傳輸安全性模式
指定傳輸層機制提供機密性、完整性和驗證(例如 HTTPS)。 使用 HTTPS 之類的傳輸時,此模式的優點在於效能高效,而且因為在因特網上普及而廣為人知。 缺點是這種安全性會分別套用在通訊路徑中的每個躍點上,使通訊容易遭受「中間人」攻擊。

訊息安全性模式
指定藉由實作一或多個安全性規格來提供安全性,例如名為 Web Services 安全性:SOAP 訊息安全性的規格。 每個訊息都包含在傳輸期間提供安全性的必要機制,以及讓接收者偵測竄改和解密訊息。 從這個意義上說,安全性會封裝在每個訊息內,提供跨多個節點的端到端加密。 由於安全性資訊會成為訊息的一部分,因此也可以將多種認證包含在訊息中(這些稱為 宣告)。 這種方法也有一個優點,讓訊息能夠安全地透過任何傳輸傳輸,包括其來源和目的地之間的多個傳輸。 這種方法的缺點是採用的密碼編譯機制複雜度,導致效能影響。

使用訊息認證安全性模式傳輸
指定使用傳輸層來提供訊息的機密性、驗證和完整性,而每個訊息都可以包含訊息接收者所需的多個認證(宣告)。

WS-*
在 WCF 中,簡化表示為成長中的 Web 服務(WS)規範集,例如 WS-Security、WS-ReliableMessaging 等等。

另請參閱