共用方式為


設定 Windows Communication Foundation 服務的繫結

建立應用程式時,您經常會需要在應用程式部署後,延後系統管理員的決定。例如,我們很多時都無法預知服務位址,或統一資源識別元 (URI)。這時候,為位址進行硬式編碼並不是理想的作法,較好的作法是讓系統管理員在建立服務後再處理。這樣的靈活性可以透過組態達成。

ms733099.note(zh-tw,VS.90).gif注意:
使用具有 /config 參數的 ServiceModel Metadata Utility Tool (Svcutil.exe) 快速建立組態檔。

主要區段

Windows Communication Foundation (WCF) 組態配置包括下列三個主要區段 (serviceModelbindings 以及 services)。

<configuration>
    <system.serviceModel>
        <bindings>
        </bindings>
        <services>
        </services>
        <behaviors>
        </behaviors>
    </system.serviceModel>
</configuration>

ServiceModel 項目

您可使用 system.ServiceModel 項目界限的區段設定一個或更多端點的服務類型,以及服務的設定值。然後可以使用位址、合約與繫結來設定每個端點。如需 端點的詳細資訊,請參閱端點建立概觀

繫結指定傳輸 (HTTP、TCP、管道、訊息佇列) 與通訊協定 (安全性、可靠性、交易流) 並且包含繫結項目,每個皆指定端點如何與外界通訊。

例如,指定 basicHttpBinding 元件表示使用 HTTP 做為端點傳輸。這是在執行階段,當使用此端點的服務開啟時,用來連接端點。

有兩類的繫結:預先定義和自訂。預先定義的繫結包含有用的項目組合,在一般狀況下使用。如需 WCF 提供之預先定義繫結類型,請參閱 系統提供的繫結。若無預先定義繫結集合擁有服務應用所需的正確功能組合,您可建構自訂繫結以滿足應用要求。如需關於 如需 自訂繫結的資訊,請參閱 <customBinding>

以下四個範例說明用來設定 WCF 服務,最常見的繫結組態。

指定使用繫結型別的端點。

第一個範例說明如何指定以位址、合約及繫結組態的端點。

<service type="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
  <endpoint 
      address="/HelloWorld2/"
      contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
      binding="basicHttpBinding" />
  </endpoint>
</service>

在此範例中,type 屬性表示組態是針對哪種服務類型。當您在編碼中以 HelloWorld 合約建立服務,它將以範例組態定義的所有端點進行初始化。若組件只實作一份服務合約,則可忽略 type 屬性,因為服務只使用可用的類型。該屬性取用一個字串,格式必須為 Namespace.Class, AssemblyName, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null

address 屬性指定其他端點用來和服務通訊的 URI。URI 可能是絕對或相對路徑。如果提供相對位址,主機必須為繫結中使用的傳輸配置提供適當的基底位址。如果沒有設定位址,會將基底位址假設為該端點的位址。

contract 屬性指定此端點所公開的合約。服務實作型別必須實作合約類型。如果服務實作實作單一合約類型,便可省略這個屬性。

binding 屬性選擇此特定端點使用之預先定義或自訂繫結。未明確選擇繫結的端點會使用預設的繫結選擇,也就是 BasicHttpBinding

修改預先定義繫結

下列範例中,預先定義的繫結會被修改與命名。然後可用作設定服務中的所有端點。設定 ReceiveTimeout 值為 1 秒以修改繫結。請注意,屬性傳回 TimeSpan 物件。

改變的繫結可在繫結區段找到,改變的繫結被給予獨特的名稱,shortTimeout,且由 name 屬性所設定。此改變的繫結即可在將 endpoint 項目中的 binding 屬性設定為獨特名稱,以建立任何端點時使用。這樣可讓您的標準繫結產生近乎無限量的變異。

ms733099.note(zh-tw,VS.90).gif注意:
若您不建立任何標準繫結的變異,不必將 bindingConfiguration 屬性設定為任何值。此時,使用的是未變更的預先設定繫結。

<service type="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
  <endpoint 
      address="/HelloWorld2/"
      contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
      binding="basicHttpBinding" />
  </endpoint>
</service>
<bindings>
    <basicHttpBinding 
        name="shortTimeout"
        receiveTimeout="00:00:01"
    />
</bindings>

設定行為以套用至服務

下列範例,針對服務類型設定特定行為。使用 metadataPublishing 項目以啟用 ServiceModel Metadata Utility Tool (Svcutil.exe) 查詢服務並從中繼資料產生 Web 服務描述語言 (WSDL) 文件。

<behaviors>
    <behavior name="MetaPlusExceptions" >
        <metadataPublishing enableGetWsdl="true" /> 
    </behavior>
</behaviors>
<services>
    <service 
       type="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
       serviceBehaviorName="MetaPlusExceptions">
       <endpoint 
          address="http://computer:8080/Hello"
          contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
          binding="basicHttpBinding" />
       </endpoint>
    </service>
</services>

之前的組態啟動用戶端呼叫

svcutil /config:Client.exe.config http://computer:8080/Hello?wsdl

並且取得「HelloWorld」型別服務的中繼資料。

指定具有使用不同繫結值之兩端點的服務

在此最後的範例,兩個端點設定為 Hello 服務類型。每個端點使用相同繫結類型的不同自訂 bindingConfiguration 屬性 (每個都會修改 basicHttpBinding)。

<service type="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null">
    <endpoint
        address="http://computer:8080/Hello"
        contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
        binding="basicHttpBinding"
        bindingConfiguration="shortTimeout"
    </endpoint>
    <endpoint
        address="http://computer:8080/Hello"
        contract="HelloWorld, IndigoConfig, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
        binding="basicHttpBinding"
        bindingConfiguration="Secure"
     </endpoint>
</service>
<bindings>
    <basicHttpBinding 
        name="shortTimeout"
        timeout="00:00:00:01" 
     />
     <basicHttpBinding 
        name="Secure" />
        <Security mode="Transport" />
</bindings>

請參閱

概念

系統提供的繫結
端點建立概觀
使用繫結來設定服務和用戶端