共用方式為


HOW TO:自訂系統提供的繫結

Windows Communication Foundation (WCF) 所包含的數種系統提供繫結可讓您設定一些基礎繫結項目的屬性,但不包含所有屬性。本主題示範如何設定繫結項目上的屬性來建立自訂繫結。

如需詳細資訊如何直接建立與設定繫結項目,而不使用系統提供繫結的詳細資訊,請參閱自訂繫結

如需詳細資訊建立並延伸自訂繫結的詳細資訊,請參閱擴充繫結

在 WCF 中,所有的繫結是由「繫結項目」(Binding Element) 所構成。每個繫結項目均衍生自 BindingElement 類別。諸如 BasicHttpBinding 的系統提供繫結,會建立並設定自有的繫結項目。本主題說明如何存取與變更這些繫結項目的屬性,而這些屬性並未直接在繫結上公開 (特別是 BasicHttpBinding 類別)。

個別的繫結項目會包含在由 BindingElementCollection 類別表示的集合中,並依下列順序新增:交易流程、可靠工作階段、安全性、複合雙工、單向、資料流安全性、訊息編碼和傳輸。請注意,並非每個繫結都需要所列的所有繫結項目。使用者定義的繫結項目也可以出現在此繫結項目集合中,而且必須依照前述順序。例如,使用者定義的傳輸必須是繫結項目集合中的最後一個項目。

BasicHttpBinding 類別包含三個繫結項目:

  1. 一種選擇性的安全性繫結項目,可以是搭配 HTTP 傳輸 (訊息層級安全性) 一起使用的 AsymmetricSecurityBindingElement 類別,或是當傳輸層提供安全性時所使用的 TransportSecurityBindingElement 類別 (這時會使用 HTTPS 傳輸)。

  2. 必要的訊息編碼器繫結項目,可以是 TextMessageEncodingBindingElementMtomMessageEncodingBindingElement

  3. 必要的傳輸繫結項目,可以是 HttpTransportBindingElementHttpsTransportBindingElement

在此範例中,我們會建立一個繫結執行個體、從中產生一個「自訂繫結」(Custom Binding)、檢查自訂繫結中的繫結項目,並在找到 HTTP 繫結項目時,將其 KeepAliveEnabled 屬性設為 falseKeepAliveEnabled 屬性不會直接在 BasicHttpBinding 上公開,因此我們必須建立自訂繫結以向下巡覽至繫結項目並設定此屬性。

若要修改系統提供的繫結

  1. 建立 BasicHttpBinding 類別的執行個體,並將其安全性模式設為訊息層級。

    '  Create an instance of the T:System.ServiceModel.BasicHttpBinding 
    '  class and set its security mode to message-level security.
    Dim binding As New BasicHttpBinding()
    With binding.Security
        .Message.ClientCredentialType = BasicHttpMessageCredentialType.Certificate
        .Mode = BasicHttpSecurityMode.Message
    End With
    
  2. 從繫結中建立自訂繫結,並從其中一個自訂繫結的屬性中建立 BindingElementCollection 類別。

    '  Create a custom binding from the binding 
    Dim cb As New CustomBinding(binding)
    '  Get the BindingElementCollection from this custom binding 
    Dim bec = cb.Elements
    
  3. BindingElementCollection 類別執行迴圈,並在找到 HttpTransportBindingElement 類別時,將其 KeepAliveEnabled 屬性設為 false

    '  Loop through the collection, and when you find the HTTP binding element
    '  set its KeepAliveEnabled property to false
    For Each be In bec
        Dim thisType = be.GetType()
        Console.WriteLine(thisType)
        If TypeOf be Is HttpTransportBindingElement Then
            Dim httpElement As HttpTransportBindingElement = CType(be, HttpTransportBindingElement)
            Console.WriteLine(Constants.vbTab & "Before: HttpTransportBindingElement.KeepAliveEnabled = {0}", httpElement.KeepAliveEnabled)
            httpElement.KeepAliveEnabled = False
            Console.WriteLine(vbTab & "After:  HttpTransportBindingElement.KeepAliveEnabled = {0}", httpElement.KeepAliveEnabled)
        End If
    Next be
    

另請參閱

參考

HttpTransportBindingElement
BasicHttpBinding
CustomBinding

概念

自訂繫結