天天看點

WCF 配置服務 (02)

配置服務概述

• 在設計和實作服務協定後,即可配置服務。 在其中可以定義和自定義如何向用戶端公開服務,包括指定可以找到服務的位址、服務用于發送和接收消息的傳輸和消息編碼,以及服務需要的安全類型。

• 配置服務的類型

– 使用配置檔案配置

–  在代碼中強制配置

• 實際上,編寫配置是 wcf 應用程式程式設計的主要部分。

• 使用配置檔案配置wcf服務

– 通過使用配置檔案配置 windows communication foundation(wcf) 服務,可提供在部署時而非設計時提供終結點和服務行為的靈活性資料。

– 可使用 .net framework 配置技術對 wcf 服務進行配置。 通常情況下,向承載 wcf 服務的 internet 資訊服務 (iis) 網站的

web.config 檔案添加 xml 元素。 通過這些元素,可以逐台計算機更改詳細資訊,例如終結點位址(用于與服務進行通信的實際

位址)。 此外,wcf 包括幾個系統提供的元素,可用于快速選擇服務的最基本的功能

– wcf 使用 .net framework 的 system.configuration 配置系統

• 使用 iis 來承載服務--使用 web.config 檔案 

• 使用任何其他宿主環境—使用或 app.config 檔案指定設定。

WCF 配置服務 (02)

• service元素

• 每個服務都具有以下屬性:

– name。指定提供服務協定的實作的類型。 這是完全限定名稱(命名空間和類型名稱)。

– behaviorconfiguration。指定一個在 behaviors 元素中找到的behavior 元素的名稱。 指定的行為控制操作,例如服務是否允許模拟。

• endpoint元素

• 每個終結點都需要以下屬性表示的位址、綁定和協定:– address。指定服務的統一資源辨別符 (uri),它可以是一個絕對位址,或是一個相對于服務基址給定的位址。 如果設定為空字元串,則訓示在建立服務的 servicehost 時,終結點在指定的基址上可用。

– binding。通常,指定一個類似 wshttpbinding 的系統提供的綁定,但也可以指定一個使用者定義的綁定。 指定的綁定确定傳輸協定類型、安全和使用的編碼,以及是否支援或啟用可靠會話、事務或流。

– bindingconfiguration。如果必須修改綁定的預設值,則可通過在bindings 元素中配置相應的 binding 元素來執行此操作。 此屬性應賦予與用于更改預設值的 binding 元素的 name 屬性相同的值。

– contract。指定定義協定的接口。 這是在由 service 元素的 name屬性指定的公共語言運作庫 (clr) 類型中實作的接口。

小注:

<a target="_blank" href="https://msdn.microsoft.com/zh-cn/library/ms733932(v=vs.110).aspx#notexistjusttomaketheaelementvisible">&lt;endpoint&gt; 元素msdn講解</a>

當指定服務與契約類型時,必須使用類型全名(包含命名空間)。

• binding元素

多少個binding都可以,隻有與endpoint中對應起來的那個binding才會被執行

使用配置檔案可以設定終結點使用的綁定。

是以,需要在endingpoint節中添加bingingconfiguration屬性,它的值與binging配置中定制的綁定名一緻。

• behaviors元素

綁定

• 綁定是用于指定連接配接到 windows communication foundation (wcf)服務終結點所必需的通信詳細資訊的對象。 wcf 服務中的每個終結點都要求正确指定綁定。

• 綁定最起碼必須指定要使用的傳輸(如 http 或 tcp)。 還可以通過綁定來設定其他特征,如安全和事務支援。

• 綁定中的資訊可能非常基本,也可能非常複雜。 最基本的綁定僅指定必須用于連接配接到終結點的傳輸協定(如 http)。 一般來說,綁定包含的有關如何連接配接到終結點的資訊屬于以下類别中的一種。

– 協定

• 确定要使用的安全機制:可靠消息傳遞功能或事務上下文流設定。

–  編碼

• 确定消息編碼(例如,文本或二進制)。

– 傳輸

• 确定要使用的基礎傳輸協定(例如,tcp 或 http)。

• 綁定中的資訊可能十分複雜,而且某些設定可能與其他設定不相容。 是以,wcf 包含一組系統提供的綁定。 這些

綁定旨在滿足大多數應用程式要求。 下面的類表示系統提供的綁定的一些示例:

– basichttpbinding:一個 http 協定綁定,适用于連接配接到符合ws-i 基本配置檔案規範的 web 服務(例如,基于 asp.netweb 服務的服務)。

– wshttpbinding:一個可互操作的綁定,适用于連接配接到符合 ws-*協定的終結點。

– netnamedpipebinding:使用 .net framework 連接配接到同一計算機上的其他 wcf 終結點。

– netmsmqbinding:使用 .net framework 建立與其他 wcf 終結點的排隊消息連接配接。

• 使用自己的綁定

– 如果系統提供的綁定都不具有服務應用程式所需的正确功能組合,則可以建立自己的綁定。 有兩種方法可以實作此目的。

–  可以使用 custombinding 對象從預先存在的綁定元素建立新的綁定

– 也可以通過從 binding 綁定派生來建立完全由使用者定義的綁定

• 使用綁定

– 使用綁定需要執行兩個基本步驟:

– 選擇或定義綁定。 最簡單的方法就是選擇 wcf 包含的系統提供綁定中的一個,并且通過該綁定的預設設定來使用它。

– 建立一個使用所選擇或定義的終結點。

• 代碼和配置

– 可以通過兩種方式來定義綁定:

– 通過代碼或通過配置。

– 這兩種方法與您使用的是系統提供的綁定還是自定義綁定無關。通常,使用代碼可以使在設計時對綁定的定義擁有完全的控制。

– 另一方面,使用配置則使系統管理者或 wcf 服務或用戶端的使用者可以更改綁定的參數,而不必重新編譯服務應用程式。 由于無法預測用于部署 wcf 應用程式的特定計算機要求,因而通常需要這種靈活性。 通過将綁定(和尋址)資訊保持在代碼外部,人們可以更改這些資訊,而不必重新編譯或重新部署應用程式。

– 請注意,代碼中定義的綁定是在配置中指定的綁定之後建立的,這使得代碼定義的綁定可以覆寫配置中定義的任何綁定。

終結點

• 與 windows communication foundation (wcf) 服務的所有通信是通過該服務的終結點進行的。 利用終結點,用戶端可通路 wcf 服務提供的功能

• 終結點的結構

– 位址。 位址唯一辨別終結點并告知潛在客戶服務的所在位置

–  綁定。 綁定指定如何與終結點進行通信

– 服務協定。 服務協定概述了終結點向用戶端公開的功能

• 指定服務的終結點有兩種方式

– 通過使用代碼的強制方式或通過配置的聲明方式。 在代碼中定義終結點通常并不可行,因為已部署服務的綁定和位址通常不同于

開發服務時使用的綁定和位址。 一般而言,使用配置定義服務終結點比使用代碼更為可行。 使綁定和尋址資訊保持在代碼之外可以在對它們進行更改後不必重新編譯和重新部署應用程式。

終結點位址的定義

• 終結點的位址由 endpointaddress 類表示,該類包含一個表示服務位址的統一資源定位符 (uri),

• 大多數傳輸的位址 uri 包含四個部分。 例如, “http://www.fabrikam.com:322/mathservice.svc/secureendpoint”這個 uri 具有以下四個部分:

–  方案:http:

– 計算機:www.fabrikam.com

–(可選)端口:322

– 路徑:/mathservice.svc/secureendpoint

• 在配置檔案中定義終結點位址

• 在代碼中定義終結點位址

wcf可以多次提供同一位址給不同的終結點

中繼資料終結點位址

• windows communication foundation (wcf) 服務通過釋出一個或多個中繼資料終結點來釋出中繼資料。

• 釋出服務中繼資料之後,可以通過标準協定(如 ws- metadataexchange (mex) 和 http/get 請求)來使用

該中繼資料。

• 中繼資料終結點類似于其他服務終結點:它們都有一 個位址、一個綁定和一個協定,并且它們都可通過配置或使用 代碼添加到服務主機

• 若要啟用釋出中繼資料終結點,必須将servicemetadatabehavior 服務行為添加到該服務。 預設情況下,wcf 服務不釋出中繼資料終結點,是以必須将它們顯式添加到服務才能為服務啟用中繼資料釋出。

WCF 配置服務 (02)

本文整理自:徐長龍 跟我一起從零開始學wcf系列課程(2):配置服務 (level 200) 教程