1、概述
每每在不少項目中數據庫鏈接字符串、變量和一些動態的加載類會寫在配置文件中。WCF也會在配置文件中寫入一些配置參數,好比服務的地址、服務用於發送和接收消息的傳輸和消息編碼等,經過配置文件能夠靈活的修改,不須要再編譯。數據庫
2、終結點Endpoint
首先咱們須要瞭解WCF的一個概念就是終結點Endpoint,WCF服務經過定義一個或者多個終結點,當服務端和客戶端的終結點相互匹配的時候才能夠完成通訊。終結點Endpoint由三部分組成Address、Binding和Contract。安全
Address:直譯就是地址,至關於URL,經過地址能夠訪問到WCF的服務。網絡
Binding:直譯是綁定,綁定的是客戶端和服務端底層的細節,好比傳輸的時候使用什麼編碼格式xml、text、二進制等。採用tcp仍是http等等。tcp
Contract:就是契約,規定咱們那些服務接口能夠訪問,那些不能訪問。暴露WCF服務的某些方法。ide
終結點的詳細配置內容就是寫在配置文件中,用於WCF實現多個應用程序之間的通訊。學習
3、WCF配置文件的組成
WCF的配置詳情都在<system.serviceModel>節點下,下面是配置文件的示例,配置的節點有點多,這裏主要描述<services>、<bindings>和<behaviors>這三個。更加深刻的內容能夠詳見MSDN文檔。優化
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.serviceModel> <behaviors> <!-- List of Behaviors --> </behaviors> <client> <!-- List of Endpoints --> </client> <diagnostics wmiProviderEnabled="false" performanceCountersEnabled="false" tracingEnabled="false"> </diagnostics> <serviceHostingEnvironment> <!-- List of entries --> </serviceHostingEnvironment> <comContracts> <!-- List of COM+ Contracts --> </comContracts> <services> <!-- List of Services --> </services> <bindings> <!-- List of Bindings --> </bindings> </system.serviceModel> </configuration>
1.<services>編碼
該節點是必須有的,配置服務、接口和終結點。能夠有多個service節點,每一個service節點有name(服務的具體實現,格式應爲 Namespace.Class.
)和behaviorConfiguration(一個字符串,其中包含要用於實例化服務的行爲(behavior)的行爲名),而且能夠在service節點下存在多個終結點<endpoint>。具體實例以下:spa
<services> <service name="WcfServiceLibrary1.Service1"> <host> <baseAddresses> <add baseAddress = "http://localhost:8733/Design_Time_Addresses/WcfServiceLibrary1/Service1/" /> </baseAddresses> </host> <!-- Service Endpoints --> <!-- 除非徹底限定,不然地址將與上面提供的基址相關 --> <endpoint address="" binding="basicHttpBinding" contract="WcfServiceLibrary1.IService1"> <!-- 部署時,應刪除或替換下列標識元素,以反映 用來運行所部署服務的標識。刪除以後,WCF 將 自動推斷相應標識。 --> <identity> <dns value="localhost"/> </identity> </endpoint> <!-- Metadata Endpoints --> <!-- 元數據交換終結點供相應的服務用於向客戶端作自我介紹。 --> <!-- 此終結點不使用安全綁定,應在部署前確保其安全或將其刪除--> <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/> </service> </services>
2.<bindings>code
此節包含標準綁定和自定義綁定的集合。每一項都是一個可由其惟一 name 進行標識的 binding 元素。服務經過用 name 與綁定進行連接來使用綁定。綁定包含如下元素:
- 協議堆棧肯定用於發送到終結點的消息的安全性、可靠性和上下文流設置。
- 傳輸肯定將消息發送到終結點時使用的基礎傳輸協議,例如 TCP 或 HTTP。
- 編碼肯定用於發送到終結點的消息的網絡編碼,例如,文本/XML、二進制或消息傳輸優化機制 (MTOM)。
由於綁定的內容節點很是多,詳細的仍是看詳細文檔,這裏只舉一個實例:
<mexHttpBinding> <binding closeTimeout="TimeSpan" name="string" openTimeout="TimeSpan" receiveTimeout="TimeSpan" sendTimeout="TimeSpan"> </binding> </mexHttpBinding>
3.<behaviors>
此元素定義名爲 endpointBehaviors 和 serviceBehaviors 的兩個子集合。每一個集合分別定義終結點和服務所使用的行爲元素。每一個行爲元素由其惟一的 name 特性標識。好比:是否容許客戶端得到服務的元數據、路由修改、操做訪問權限設置、服務的限制機制、服務請求的超時時間等。實例以下:
<behaviors> <serviceBehaviors> <behavior> <serviceMetadata httpGetEnabled="True" httpsGetEnabled="True"/> <serviceDebug includeExceptionDetailInFaults="False" /> </behavior> </serviceBehaviors> </behaviors>
4、其餘
新建一個WCF服務程序後會有一個Web.config文件有<system.serviceModel>配置節點,當一個控制檯應用程序添加該服務引用後也會有App.config文件中也會有<system.serviceModel>節點。咱們知道當服務端和客戶端的終結點相互匹配的時候才能夠完成通訊,可是如今咱們把服務端Web.config的<system.serviceModel>節點內容所有刪除,而後將WCF應用服務程序發佈到IIS上,以後仍是能夠在客戶端成功訪問該服務。這是由於IIS在默認監聽http協議,那樣就能夠肯定文件地址、綁定,找到了文件那接口契約什麼的也都找獲得了,因此這時候服務端配置文件不須要<system.serviceModel>也能夠。
5、說明
這個隨筆是我本身學習流程的一個記錄,和你們共勉。