簡化的組態

設定 Windows Communication Foundation (WCF) 服務可能是一個複雜的工作。 這項工作不但包含許多不同的選項,而且判斷需要哪些設定往往絕非易事。 雖然組態檔能夠增加 WCF 服務的靈活度,但是也會造成許多不易發現的問題。.NET Framework 版本 4 能夠解決這些問題,並且提供可讓使用者降低服務組態大小與複雜度的方式。

簡化的組態

在 WCF 組態檔中,<system.serviceModel> 工作階段會針對每一項裝載的服務包含一個 <service> 項目。 <service> 項目包含 <endpoint> 項目的集合,這些項目可指定對每一項服務公開的端點,以及一組選擇性的服務行為。 <endpoint> 項目會指定端點公開的位址、繫結和合約,以及選擇性的繫結組態和端點行為。 <system.serviceModel> 區段還包含 <behaviors> 項目,可讓您指定服務或端點行為。 下列範例顯示組態檔的 <system.serviceModel> 區段。

system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior name=”MyServiceBehavior”>
        <serviceMetadata httpGetEnabled=”true”>
        <serviceDebug includeExceptionDetailInFaults=”false”>
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <bindings>
   <basicHttpBinding>
      <binding name=MyBindingConfig”
               maxBufferSize=”100”
               maxReceiveBufferSize=”100” />
   </basicHttpBinding>
   </bindings>   <services>
    <service behaviorConfiguration=”MyServiceBehavior”
             name=”MyService”>
      <endpoint address=””
                binding=”basicHttpBinding”
                contract=”ICalculator”
                bindingConfiguration=”MyBindingConfig” />
      <endpoint address=”mex”
                binding=”mexHttpBinding”
                contract=”IMetadataExchange”/>
    </service>
  </services>
</system.serviceModel>

.NET Framework 4 會透過免除對 <service> 項目的需求,讓設定 WCF 服務更為容易。 如果您未在 <service> 區段 (如果有的話) 中加入任何端點,而且您的服務並未以程式設計方式定義任何端點,則會自動將一組端點加入至服務,而且每個服務基底位址和服務實作的每個合約都會有一個端點。 每一個端點中的端點位置都會對應至基底位址,繫結是由基底位址配置所決定,而合約則是服務實作的合約。 如果您不需要指定任何端點或服務行為,或是進行任何繫結設定變更,就不需要指定組態檔。 如果服務實作兩個合約,而且主機同時啟用 HTTP 和 TCP 傳輸,服務主機就會建立四個預設端點,使用各個傳輸的每一個合約都會有一個端點。 若要建立預設端點,服務主機必須知道要使用哪些繫結。 這些設定是在 <system.serviceModel> 區段內的 <protocolMappings> 區段中指定。 <protocolMappings> 區段包含傳輸通訊協定配置的清單,這些配置會對應至繫結型別。 服務主機會使用傳遞至主機本身的基底位址判斷要使用的繫結。 下列範例使用 <protocolMappings> 項目。

Ee358768.note(zh-tw,VS.100).gif注意:
網際網路資訊服務 (IIS) 或 Windows 處理序啟用服務 (WAS) 底下裝載的服務會使用虛擬目錄做為其基底位址。

<protocolMapping>
  <add scheme=”http”     binding=”basicHttpBinding” bindingConfiguration=”MyBindingConfiguration”/>
  <add scheme=”net.tcp”  binding=”netTcpBinding”/>
  <add scheme=”net.pipe” binding=”netNamedPipeBinding”/>
  <add scheme=”net.msmq” binding=”netMSMQBinding”/>
</protocolMapping>

在上面的範例中,基底位址開頭為 “http” 配置的端點會使用 BasicHttpBinding。 基底位置開頭為 “net.tcp” 配置的端點則會使用 NetTcpBinding。 您可以覆寫本機 App.config 或 Web.config 檔中的設定。

<protocolMappings> 區段內的每一個項目都必須指定配置和繫結。 每個項目也可以選擇性地指定 bindingConfiguration 屬性,該屬性會指定組態檔之 <bindings> 區段內的繫結組態。 如果未指定 bindingConfiguration,則會使用適當繫結型別的匿名繫結組態。

預設端點的服務行為會使用 <serviceBehaviors> 區段內的匿名 <behavior> 區段設定。 <serviceBehaviors> 內任何未命名的 <behavior> 項目都會用來設定服務行為。 例如,下列組態檔會啟用主機內所有服務的服務中繼資料發行。

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>    <!-- No <service> tag is necessary. Default endpoints are added to the service -->
    <!-- The service behavior with name="" is picked up by the service -->
 </system.serviceModel>

端點行為是使用 <serviceBehaviors> 區段內的匿名 <behavior> 區段設定。

下列範例的組態檔相當於本主題開頭的組態檔,使用的是簡化的組態模型。

<system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="True"/>
          <serviceDebug includeExceptionDetailInFaults=”false”/>
        </behavior>
      </serviceBehaviors>
    </behaviors>    <bindings>
       <basicHttpBinding>
          <binding maxBufferSize=”100”
                   maxReceiveBufferSize=”100” />
       </basicHttpBinding>
    </bindings>    <!-- No <service> tag is necessary. Default endpoints will be added to the service -->
    <!-- The service behavior with name="" will be picked up by the service -->
    <protocolMapping>
      <add scheme=”http”     binding=”basicHttpBinding” / </protocolMapping>
  </system.serviceModel>

另請參閱

概念

使用組態檔設定服務
設定 Windows Communication Foundation 服務的繫結
設定系統提供的繫結

其他資源

設定服務
Configuring Windows Communication Foundation Applications