一次搞懂WCF 配置檔案

一劍平江湖發表於2014-05-06

1.WCF的服務端配置

服務端的配置檔案主要包括endpoint、binding、behavior的配置。一個標準的服務端配置檔案所包含的主要xml配置節如下所示:
<system.ServiceModel>
   <services>
      <service>
         <endpoint/>
      </service>
   </services>
   <bindings>
   <!—定義一個或多個系統提供的binding元素,例如<basicHttpBinding> --> 
   <!—也可以是自定義的binding元素,如<customBinding>. -->
      <binding>
      <!—例如<BasicHttpBinding>元素. -->
      </binding>
   </bindings>
   <behaviors>
   <!—一個或多個系統提供的behavior元素. -->
      <behavior>
      <!—例如<throttling>元素. -->
      </behavior>
   </behaviors>
</system.ServiceModel>
1.1 <services>配置節
在<services>配置節中可以定義多個服務,每一個服務都被放到<service>配置節中,WCF的宿主程式可以通過配置檔案找到這些定義的服務併發布這些服務。


<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>


我們也可以定義多個endpoint,例如:
<services>
  <service 
      name="Microsoft.ServiceModel.Samples.CalculatorService"
      behaviorConfiguration="CalculatorServiceBehavior">
    <endpoint address=""
             binding="wsHttpBinding"
             contract="Microsoft.ServiceModel.Samples.ICalculator" />
    <endpoint address="mex"
             binding="mexHttpBinding"
             contract=" Microsoft.ServiceModel.Samples.IMetadataExchange" />
  </service>
</services>


如果address值為空,那麼endpoint的地址就是預設的基地址(Base Address)。例如ICalculator服務的地址就是http://localhost/servicemodelsamples/service.svc,而


IMetadataExchange服務的地址則為http://localhost/servicemodelsamples/service.svc/mex。這裡所謂的基地址可以在<service>中通過配置<host>來定義:
<service 
      name="Microsoft.ServiceModel.Samples.CalculatorService"
      behaviorConfiguration="CalculatorServiceBehavior">
<host>
    <baseAddresses>
        <add baseAddress=
"http://localhost/ServiceModelSamples/service.svc"/>
    </baseAddresses>
</host>
<endpoint … />
</service>


1.2 <behaviors>配置節


    當我們在定義一個實現了Service Contract的類時, binding和address資訊是客戶端必須知道的,否則無法呼叫該服務。然而,如果需要指定服務在執行方面的相關特性時,就必


須定義服務的behavior。在WCF中,定義behavior就可以設定服務的執行時屬性,甚至於通過自定義behavior插入一些自定義型別。例如通過指定ServiceMetadataBehavior,可以使WCF


服務對外公佈Metadata。配置如下:
<behaviors>
    <serviceBehaviors>
    <behavior name="metadataSupport">
      <serviceMetadata httpGetEnabled="true" httpGetUrl=""/>
    </behavior>
    <serviceBehaviors>
<behaviors>


在WCF中,behavior被定義為Attribute,其中,System.ServiceModel.ServiceBehaviorAttribute和System.ServiceModel.OperationBehaviorAttribute是最常用的behavior。雖然,


behavior作為Attribute可以通過程式設計的方式直接施加到服務上,但出於靈活性的考慮,將behavior定義到配置檔案中才是最好的設計方式。
利用ServiceBehavior與OperationBehavior可以控制服務的如下屬性:
1、 物件例項的生命週期;
2、 併發與非同步處理;
3、 配置行為;
4、 事務行為;
5、 序列化行為;
6、 後設資料轉換;
7、 會話的生命週期;
8、 地址過濾以及訊息頭的處理;
9、 模擬(Impersonation);


例如,通過ServiceBehavior設定物件例項的生命週期:
<behaviors>
    <serviceBehaviors>
    <behavior name="metadataSupport">
      <instanceContextMode httpGetEnabled="true" httpGetUrl=""/>
    </behavior>
    <serviceBehaviors>
<behaviors>

相關文章