WCF終結點概述
- 在之前文章的示例中,我們都是通過配置服務的終結點(endpoint)發布的服務,供客戶端調用,這是因為WCF服務的所有通信都是通過該服務的終結點進行的。每個終結點(endpoint)包含四個屬性。
- 一個指示可以查找終結點的位置的地址。
- 一個指定客戶端如何與終結點進行通信的綁定。
- 一個標識可用操作的協定。
- 一組指定終結點的本地實現細節的行為。

終結點的結構
- WCF服務終結點(endpoint)通信結構

- 終結點(endpoint)的組成內容

終結點地址
- 每個終結點都具有與其關聯的地址,該地址用於查找和標識終結點。此地址主要包括指定終結點位置的統一資源標識符 (URI)。終結點地址在WCF編程模型中由 EndpointAddress 類表示,該類包含一個可選的 Identity 屬性(允許由與一個終結點交換消息的其他終結點對該終結點進行身份驗證)和一組可選的 Headers 屬性(定義到達服務所需的任何其他 SOAP 頭)。可選頭提供其他的更詳細尋址信息以標識服務終結點或與之交互。終結點的地址在網絡上表示為 WS-Addressing 終結點引用 (EPR)。在 WCF 中,EndpointAddress 按照 WS-Addressing 標准中的定義建立終結點引用 (EPR) 的模型。大多數傳輸的地址 URI 包含以下四個部分。例如,“http://www.wangweimutou.com:8888/demoservice.svc/demoEndpoint”這個 URI 具有以下四個部分:
- 方案:http:
- 計算機:www. wangweimutou.com
- 端口(可選):8888
- 路徑:/demoservice.svc/demoEndpoint

- 作為 EPR 模型的一部分,每個終結點引用都可以包含一些添加額外標識信息的引用參數。在 WCF 中,將這些引用參數建模為 AddressHeader 類的實例。可以通過使用代碼以強制方式或通過配置以聲明方式指定服務的終結點地址。在代碼中定義終結點通常不可行,因為已部署的服務的綁定和地址通常不同於開發服務時使用的綁定和地址。一般而言,使用配置定義服務終結點比使用代碼更為可行。通過將綁定和尋址信息放置在代碼之外,可以在更改這些信息之后不必重新編譯和重新部署應用程序。
- 在 WCF 中,有兩種指定服務終結點地址的方式。可以為每個與服務關聯的終結點指定一個絕對地址,也可以為服務的 ServiceHost 提供一個基址,然后再為每個與此服務關聯的終結點指定一個地址(該地址是相對於此基址定義的)。可以在配置或代碼中使用這兩種過程來為服務指定終結點地址。如果不指定相對地址,則服務會使用基址。也可以為一個服務指定多個基址,但是對於每個傳輸協議,每個服務只允許有一個基址。如果有多個終結點,則會使用不同的綁定來配置每個終結點,它們的地址必須是唯一的。使用相同綁定但使用不同協定的終結點可以使用相同的地址。
終結點綁定
- 綁定可指定在與終結點通話時所使用的通信機制,並指示如何連接到終結點。綁定包含三種類型的元素:
- 協議通道綁定元素,用於確定要用於發送到終結點的消息的安全性、可靠性、上下文流設置或用戶定義的協議。
- 傳輸通道綁定元素,用於確定在向終結點發送消息時要使用的基礎傳輸協議,例如 TCP 或 HTTP。
- 消息編碼綁定元素,用於確定要對發送到終結點的消息使用的網絡編碼,例如,文本/XML、二進制或消息傳輸優化機制 (MTOM)。
- 系統提供的綁定類型

- 綁定功能列表

- 綁定功能解釋說明

- 綁定方式選擇建議

終結點協定
- 服務協定指定終結點與外界通信的內容。更具體地說,它是有關一組特定消息的聲明,這些消息被組織成基本消息交換模式 (MEP),如請求/答復、單向和雙工。如果說服務協定是一組在邏輯上相關的消息交換,那么服務操作就是單個消息交換。服務協定是一個聲明,它提供了有關以下方面的信息:
- 服務中操作的分組方式。
- 針對交換的消息所進行的各種操作的簽名。
- 這些消息的數據類型。
- 操作的位置。
- 用於支持與服務成功通信的特定協議和序列化格式。
- WCF服務是基於消息傳輸的,為了將這種信息傳達到其他平台(包括非 Microsoft 平台)上的應用程序,XML 服務協定以標准 XML 格式公開表示,例如 Web 服務描述語言 (WSDL)和 XML 架構 (XSD)以及其他格式。許多平台的開發人員都可以使用此公共協定信息創建可以與該服務進行通信的應用程序,這是因為這些開發人員能夠理解規范的語言,並且這些語言通過描述該服務支持的公共窗體、格式和協議支持互操作。
- 協定可以用多種方式表示,盡管 WSDL 和 XSD 語言非常適合以可理解的方式描述服務,但這些語言很難直接使用 — 無論如何,這些語言只能描述服務,而不能描述服務協定實現。因此,WCF 應用程序使用托管屬性、接口和類來定義服務的結構,並且實現服務。
- 客戶端或其他服務實施者(特別是在其他平台上)需要時,可以以元數據(WSDL 和 XSD)的形式轉換(也稱為“導出”)所得到的在托管類型中定義的協定。結果可以得到一個簡單的編程模型,可以使用公共元數據向任何客戶端應用程序描述該模型。
