簡化的組態
設定 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> 項目。
![]() |
---|
網際網路資訊服務 (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