HOW TO:自訂系統提供的繫結
Windows Communication Foundation (WCF) 所包含的數種系統提供繫結可讓您設定一些基礎繫結項目的屬性,但不包含所有屬性。本主題示範如何設定繫結項目上的屬性來建立自訂繫結。
如需詳細資訊如何直接建立與設定繫結項目,而不使用系統提供繫結的詳細資訊,請參閱自訂繫結。
如需詳細資訊建立並延伸自訂繫結的詳細資訊,請參閱擴充繫結。
在 WCF 中,所有的繫結是由「繫結項目」(Binding Element) 所構成。每個繫結項目均衍生自 BindingElement 類別。諸如 BasicHttpBinding 的系統提供繫結,會建立並設定自有的繫結項目。本主題說明如何存取與變更這些繫結項目的屬性,而這些屬性並未直接在繫結上公開 (特別是 BasicHttpBinding 類別)。
個別的繫結項目會包含在由 BindingElementCollection 類別表示的集合中,並依下列順序新增:交易流程、可靠工作階段、安全性、複合雙工、單向、資料流安全性、訊息編碼和傳輸。請注意,並非每個繫結都需要所列的所有繫結項目。使用者定義的繫結項目也可以出現在此繫結項目集合中,而且必須依照前述順序。例如,使用者定義的傳輸必須是繫結項目集合中的最後一個項目。
BasicHttpBinding 類別包含三個繫結項目:
一種選擇性的安全性繫結項目,可以是搭配 HTTP 傳輸 (訊息層級安全性) 一起使用的 AsymmetricSecurityBindingElement 類別,或是當傳輸層提供安全性時所使用的 TransportSecurityBindingElement 類別 (這時會使用 HTTPS 傳輸)。
必要的訊息編碼器繫結項目,可以是 TextMessageEncodingBindingElement 或 MtomMessageEncodingBindingElement。
必要的傳輸繫結項目,可以是 HttpTransportBindingElement 或 HttpsTransportBindingElement。
在此範例中,我們會建立一個繫結執行個體、從中產生一個「自訂繫結」(Custom Binding)、檢查自訂繫結中的繫結項目,並在找到 HTTP 繫結項目時,將其 KeepAliveEnabled
屬性設為 false
。KeepAliveEnabled
屬性不會直接在 BasicHttpBinding
上公開,因此我們必須建立自訂繫結以向下巡覽至繫結項目並設定此屬性。
若要修改系統提供的繫結
建立 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
從繫結中建立自訂繫結,並從其中一個自訂繫結的屬性中建立 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
對 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