【WCF系列】(三)如何配置和承載服務
如何配置和承載服務
配置綁定
配置服務:任務
為什麽要配置服務:在設計和實現服務協定後,即可配置服務。 在其中可以定義和自定義如何向客戶端公開服務指定可以找到服務的地址、服務用於發送和接收消息的傳輸和消息編碼,以及服務需要的安全類型
兩種配置方式:
在配置文件中配置
在代碼中配置
配置服務:通過配置文件
WCF術語介紹
服務協定:服務協定將多個相關的操作聯系在一起,組成單個功能單元。 協定可以定義服務級設置,如服務的命名空間、對應的回調協定以及其他此類設置。 在大多數情況下,協定是通過用您所選的編程語言創建一個接口並將 ServiceContractAttribute 屬性應用於該接口來定義的。 通過實現該接口,可生成實際的服務代碼。
操作協定:操作協定定義參數並返回操作的類型。 在創建定義服務協定的接口時,可以通過將 OperationContractAttribute 屬性應用於協定中包含的每個方法定義來表示一個操作協定。 可以將操作建模為采用單個消息作為參數並返回單個消息,或者建模為采用一組類型作為參數並返回一個類型。 在後一種情況下,系統將確定需要為該操作交換的消息的格式。
宿主:服務必須承載於某個進程中。 “宿主”是控制服務的生存期的應用程序。 服務可以是自承載的,也可以由現有的宿主進程進行管理。
Service元素
Service元素:在<services>配置節中可以定義多個服務,每一個服務都被放到<service>配置節中,WCF的宿主程序可以通過配置文件找到這些定義的服務並發布這些服務。
每個服務都具有以下屬性:
name:指定提供服務協定的實現的類型。 這是完全限定名稱(命名空間和類型名稱)
behaviorConfiguration:指定一個在behaviors 元素中找到的behavior 元素的名稱。 指定的行為控制操作,例如服務是否允許模擬。
<service>配置節包含name和behaviorConfiguration屬性。其中,name配置了實現Service Contract的類型名。類型名必須是完整地包含了命名空間和類型名。而behaviorConfiguration的配置值則與其後的<behaviors>配置節的內容有關。<endpoint>是<service>配置節的主體,其中,<endpoint>配置節包含了endpoint的三個組成部分:Address、Binding和Contract。由於具體的binding配置是在<bindings>配置節中完成,因而,在<endpoint>中配置了bindingConfiguration屬性,指向具體的binding配置。
<services> <service name="BruceZhang.MyService" behaviorConfiguration="MyBehavior"> <endpoint address="" binding="netTcpBinding" bindingConfiguration="DuplexBinding" contract="BruceZhang.IHello" /> </service> </services>
<behaviors>配置節
當我們在定義一個實現了Service Contract的類時, binding和address信息是客戶端必須知道的,否則無法調用該服務。然而,如果需要指定服務在執行方面的相關特性時,就必須定義服務的behavior。
Endpoint元素
每個終結點都需要以下屬性表示的地址、綁定和協定:
address:指定服務的統一資源標識符(URI),它可以是一個絕對地址或是一個相對於服務基址給定的地址,如果設置為空字符串,則指示在創建服務的ServiceHost時,終結點在指定的基址上可用。
Binding:通常,指定一個類似WsHttpBinding的系統提供的綁定,但也可以指定一個用戶定義的綁定。 指定的綁定確定傳輸協議類型、安全和使用的編碼,以及是否支持或啟用可靠會話、事務或流。
bindingConfiguration:如果必須修改綁定的默認值,則可通過在bindings元素中配置相應的binding元素來執行此操作 此屬性應賦予與用於更改默認值的binding 元素的name 屬性相同的值。
contract:指定定義協定的接口。 這是在由service 元素的name 屬性指定的公共語言運行庫(CLR) 類型中實現的接口。
<services> <service name="WcfServiceThree.Service1" behaviorConfiguration="serviceDemo"> <host> <baseAddresses> <add baseAddress="http://localhost:1123/Service1.svc/Service1"/> </baseAddresses> </host> <endpoint address="" binding="wsDualHttpBinding" contract="WcfServiceThree.IService1"> <identity> <dns value="localhost"/> </identity> </endpoint> </service> </services> <behaviors> <serviceBehaviors> <behavior name="serviceDemo"> <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> <serviceDebug includeExceptionDetailInFaults="false"/> </behavior> </serviceBehaviors> </behaviors>View Code
綁定是用於指定連接到WCF服務終結點所必需的通信詳細信息的對象,WCF服務中的每個終結都要求正確指定綁定
綁定最起碼必須指定要使用的傳輸(如HTTP 或TCP
綁定包含的有關如何連接到終結點的信息屬於以下類別中的一種。
– 協議: 確定要使用的安全機制:可靠消息傳遞功能或事務上下文流設置。
– 編碼: 確定消息編碼(例如,文本或二進制)。
– 傳輸:確定要使用的基礎傳輸協議(例如 TCP或HTTP)
WCF 包含一組系統提供的綁定。這些綁定旨在滿足大多數應用程序要求。 下面的類表示系統提供的綁定的一些示例:
– BasicHttpBinding:一個HTTP 協議綁定,適用於連接到符合WS-I 基本配置文件規範的Web 服務(例如,基於ASP.NET Web 服務的服務)。
– WSHttpBinding:一個可互操作的綁定,適用於連接到符合WS-* 協議的終結點。 協議的終結點。
– NetNamedPipeBinding:使用.NET Framework 連接到同一計算機上的其他WCF 終結點。
– NetMsmqBinding:使用.NET Framework 創建與其他WCF 終結點的排隊消息連接。.
配置服務:使用代碼實現
Uri baseAddress = new Uri("http://localhost:8000/HelloService"); string address = "http://localhost:8000/HelloService/MyService"; using (ServiceHost serviceHost = new ServiceHost(typeof(HelloService), baseAddress)) { serviceHost.AddServiceEndpoint(typeof(IHello), new BasicHttpBinding(), address); serviceHost Open(); Console.WriteLine("Press <enter> to terminate service"); Console.ReadLine(); serviceHost.Close(); serviceHost.Close(); }View Code
【WCF系列】(三)如何配置和承載服務