WCF入門教程(五)配置文件
服務協定以及實現寫好后,需要將相關服務公布出去,就需要HOST來承載,供客戶端來調用。
承載服務有兩種方式,一種通過配置文件,一種通過代碼進行配置。上一章已經介紹了代碼方式來架設服務。
當然配置文件的方式還是很靈活,應用廣泛。
通過此文章具體介紹WCF如果通過配置文件的方式進行配置。
一、配置文件功能
需要配置服務的EndPoint,設置相關綁定協議以及服務協定,並且還可以限定其具體的行為等。
二、配置文件結構
主要配置內容包括service節點、binding和behavior節點,還有其他的一些節點這里暫時不展開討論。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <!-- 部署服務庫項目時,必須將配置文件的內容添加到 主機的 app.config 文件中。System.Configuration 不支持庫的配置文件。--> <system.serviceModel> <!--配置服務節點Start--> <services> <!--配置某一服務,在這里可以指定服務名稱--> <service name="SecondWCFSample.Service1"> </service> </services> <!--配置服務節點End--> <!--配置綁定節點Start--> <bindings> <basicHttpBinding></basicHttpBinding> <mexHttpBinding></mexHttpBinding> <wsHttpBinding></wsHttpBinding> </bindings> <!--配置綁定節點End--> <!--配置行為節點Start--> <behaviors> <serviceBehaviors> <behavior> </behavior> </serviceBehaviors> </behaviors> <!--配置行為節點End--> <!--路由設置Start--> <routing> <filters> <filter name="filter1" filterType="Action"/> </filters> </routing> <!--路由設置End--> </system.serviceModel> </configuration>
三、具體配置說明
1、Service節點
屬性說明:
name - 指定這個service配置是針對的那個服務,為一個實現了某些Contract的服務類的完全限定名(名稱空間.類型名),ServiceHost載入一個服務后,會到配置文件中的<services>下找有沒有name屬性跟服務匹配的<service>的配置
behaviorConfiguration - 指定在<serviceBehaviors>下的一個<behavior>的name,這個特定<behavior>給這個service制定了一些行為,比如服務是否允許身份模擬-->
案例:
<!--屬性設置,name:服務的完全限定名,命名空間+實現類名;behaviorConfiguration行為配置,取設置的behavior的名稱,具體可見behaviors節點--> <service name="SecondWCFSample.Service1" behaviorConfiguration="basicBehavior"> </service>
2、Endpoint節點
定義endpoint,指定三個要素ABC,地址(Address),綁定(Binding)以及協定(Contract)。
案例:
<!--定義endpoint,指定地址(address),綁定(binding)以及協定(contract)--> <!-- 屬性說明: address - 服務端地址,相對於baseAddress的相對地址,如果為空則為baseAddress,也可以設定為絕對地址 binding - 綁定協議,系統的某一協議,basicHttpBinding,mexHttpBinding,wsHttpBinding等 contract - 協議完全限定名(名稱空間.類型名) name - 客戶端代理類的構造方法中的endpointConfigurationName對應到這個name bindingConfiguration - 指定客戶端binding的具體設置,指向<bindings>元素下同類型binding的name --> <endpoint address ="" binding="wsHttpBinding" contract="SecondWCFSample.IService1"> <!--服務標識。 部署時,應刪除或替換下列標識元素,以反映用來運行所部署服務的標識。刪除之后,WCF將自動推斷相應標識。--> <identity> <dns value="localhost"/> </identity> </endpoint>
3、Binding
綁定可指定在與終結點通話時所使用的通信機制,並指示如何連接到終結點。
綁定包含以下元素:
- 協議堆棧確定用於發送到終結點的消息的安全性、可靠性和上下文流設置。
- 傳輸確定將消息發送到終結點時使用的基礎傳輸協議,例如 TCP 或 HTTP。
- 編碼確定用於發送到終結點的消息的網絡編碼,例如,文本/XML、二進制或消息傳輸優化機制 (MTOM)。
具體的binding,功能不同,設置的屬性不同,具體參照以下
綁定 | 配置元素 | 說明 |
---|---|---|
一個綁定,適用於與符合 WS-Basic Profile 的 Web 服務(例如基於 ASP.NET Web 服務 (ASMX) 的服務)進行的通信。此綁定使用 HTTP 作為傳輸協議,並使用文本/XML 作為默認的消息編碼。 |
||
一個安全且可互操作的綁定,適合於非雙工服務約定。 |
||
一個安全且可互操作的綁定,適用於雙工服務協定或通過 SOAP 媒介進行的通信。 |
||
一個支持 WS-Federation 協議的安全的、可互操作的綁定,使聯盟中的組織可以高效地對用戶進行身份驗證和授權。 |
||
一個安全且經過優化的綁定,適用於 WCF 應用程序之間跨計算機的通信。 |
||
一個安全、可靠且經過優化的綁定,適用於 WCF 應用程序之間計算機上的通信。 |
||
一個排隊綁定,適用於 WCF 應用程序之間的跨計算機的通信。 |
||
一個支持多計算機安全通信的綁定。 |
||
一個適合於 WCF 應用程序和現有消息隊列應用程序之間的跨計算機通信的綁定。 |
||
一個綁定,適用於與符合 WS-Basic Profile 且允許使用 HTTP Cookie 交換上下文的 Web 服務進行的通信。 |
||
一個安全且經過優化的綁定,適用於允許使用 SOAP 標頭交換上下文的 WCF 應用程序之間跨計算機的通信。 |
||
一個綁定,可用於為通過 HTTP 請求(而不是 SOAP 消息)公開的 WCF Web 服務配置終結點。 |
||
一個安全且可互操作的綁定,適用於允許使用 SOAP 標頭交換上下文的非雙工服務協定。 |
案例:
<!--配置綁定節點Start--> <bindings> <basicHttpBinding> <binding name="basic" transferMode="Streamed" messageEncoding="Text" allowCookies="false" textEncoding=""></binding> </basicHttpBinding> <netTcpBinding> </netTcpBinding> <customBinding> </customBinding> </bindings> <!--配置綁定節點End-->
4、Behavior節點
behavior設置服務的運行時行為,比如:是否允許客戶端獲得服務的元數據、路由修改、操作訪問權限設置、服務的限制機制、服務請求的超時時間等。
Behavior的具體含義可見:
WCF入門教程(一)簡介
http://www.cnblogs.com/yank/p/3653160.html
案例:
<!--配置行為節點Start--> <behaviors> <serviceBehaviors> <behavior name="basicBehavior"> <!-- 為避免泄漏元數據信息, 請在部署前將以下值設置為 false 並刪除上面的元數據終結點 --> <serviceMetadata httpGetEnabled="True"/> <!-- 要接收故障異常詳細信息以進行調試, 請將以下值設置為 true。在部署前設置為 false 以避免泄漏異常信息--> <serviceDebug includeExceptionDetailInFaults="False" /> </behavior> </serviceBehaviors> </behaviors> <!--配置行為節點End-->
具體子節點功能介紹如下:
元素 | 說明 |
---|---|
包含 DataContractSerializer 的配置數據。 |
|
指定要使用的持久性提供程序實現的類型以及用於持久性操作的超時值。 |
|
提供對路由服務的運行時訪問以允許對路由配置進行動態修改。 |
|
提供一個工作流配置元素,該元素在服務級別建立傳輸、消息或發起方的有效性。 |
|
指定用於授予服務操作訪問權限的設置。 |
|
指定要用於對服務進行身份驗證的憑據以及與客戶端憑據驗證相關的設置。 |
|
指定 Windows Communication Foundation (WCF) 服務的調試和幫助信息功能。 |
|
指定服務終結點的可發現性。 |
|
指定服務元數據的發布和相關信息。 |
|
指定用於在服務操作過程中啟用安全事件審核的設置。 |
|
指定 WCF 服務的限制機制。 |
|
指定服務的超時。 |
|
指定用於承載基於工作流的 WCF 服務的 WorkflowRuntime 實例的設置。 |
|
允許從請求消息頭中檢索元數據地址信息。 |
詳細可見:
http://msdn.microsoft.com/zh-cn/library/aa967282(v=vs.100).aspx
四、完整實例
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.web> <compilation debug="true" /> </system.web> <!-- 部署服務庫項目時,必須將配置文件的內容添加到 主機的 app.config 文件中。System.Configuration 不支持庫的配置文件。--> <system.serviceModel> <!--配置服務節點Start--> <services> <!--配置某一服務,在這里可以指定服務名稱--> <!--屬性設置,name:服務的完全限定名,命名空間+實現類名;behaviorConfiguration行為配置,取設置的behavior的名稱,具體可見behaviors節點--> <service name="SecondWCFSample.Service1" behaviorConfiguration="basicBehavior"> <!--主機地址--> <host> <!--基址,訪問某服務地址的基址--> <baseAddresses> <add baseAddress = "http://localhost:8732/Design_Time_Addresses/SecondWCFSample/Service1/" /> </baseAddresses> <!--訪問超時時間--> <timeouts /> </host> <!-- Service Endpoints --> <!-- 除非完全限定,否則地址將與上面提供的基址相關 --> <!--定義endpoint,指定地址(address),綁定(binding)以及協定(contract)--> <!-- 屬性說明: address - 服務端地址,相對於baseAddress的相對地址,如果為空則為baseAddress,也可以設定為絕對地址 binding - 綁定協議,系統的某一協議,basicHttpBinding,mexHttpBinding,wsHttpBinding等 contract - 協議完全限定名(名稱空間.類型名) name - 客戶端代理類的構造方法中的endpointConfigurationName對應到這個name bindingConfiguration - 指定客戶端binding的具體設置,指向<bindings>元素下同類型binding的name --> <endpoint address ="" binding="wsHttpBinding" contract="SecondWCFSample.IService1"> <!--服務標識。 部署時,應刪除或替換下列標識元素,以反映用來運行所部署服務的標識。刪除之后,WCF將自動推斷相應標識。--> <identity> <dns value="localhost"/> </identity> </endpoint> <!-- Metadata Endpoints --> <!-- 元數據交換終結點供相應的服務用於向客戶端做自我介紹。 --> <!-- 此終結點不使用安全綁定,應在部署前確保其安全或將其刪除--> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> </service> </services> <!--配置服務節點End--> <!--配置綁定節點Start--> <bindings> <basicHttpBinding> <binding name="basic" transferMode="Streamed" messageEncoding="Text" allowCookies="false"></binding> </basicHttpBinding> <netTcpBinding> </netTcpBinding> <customBinding> </customBinding> </bindings> <!--配置綁定節點End--> <!--配置行為節點Start--> <behaviors> <serviceBehaviors> <behavior name="basicBehavior"> <!-- 為避免泄漏元數據信息, 請在部署前將以下值設置為 false 並刪除上面的元數據終結點 --> <serviceMetadata httpGetEnabled="True"/> <!-- 要接收故障異常詳細信息以進行調試, 請將以下值設置為 true。在部署前設置為 false 以避免泄漏異常信息--> <serviceDebug includeExceptionDetailInFaults="False" /> <!----> <serviceSecurityAudit auditLogLocation="Security"/> <!--服務終結點的可發現性--> <serviceDiscovery> <announcementEndpoints> </announcementEndpoints> </serviceDiscovery> <!--maxItemsInObjectGraph指定要序列化或反序列化的最大項數--> <dataContractSerializer maxItemsInObjectGraph="1048576"/> </behavior> </serviceBehaviors> </behaviors> <!--配置行為節點End--> <!--路由設置Start--> <routing> <filters> <filter name="filter1" filterType="Action"/> </filters> </routing> <!--路由設置End--> </system.serviceModel> </configuration>
五、其他配置
關於其他配置項,研究比較深入的朋友可以參見MSDN詳細文檔
http://msdn.microsoft.com/zh-cn/library/ms731354(v=vs.100).aspx