HOW TO:使用 SecurityBindingElement 建立自訂繫結
Windows Communication Foundation (WCF) 包括數個系統提供之繫結,您可以對這些繫結進行設定,但是自訂這些繫結並不具有設定所有安全性選項時 WCF 所支援的完整彈性。本主題示範如何直接從個別的繫結項目建立自訂繫結,並強調一些可在建立這類繫結時指定的安全設定。如需詳細資訊建立自訂繫結的詳細資訊,請參閱擴充繫結。
建立自訂繫結
在 WCF 中,所有的繫結是由「繫結項目」(Binding Element) 所構成。每個繫結項目均衍生自 BindingElement 類別。如果是標準系統提供的繫結,雖然您可以自訂某些屬性設定,但是系統仍會為您先建立並且設定好繫結項目。
相反的,若要建立自訂繫結,會建立並且設定繫結項目,並且從自訂項目建立一個 CustomBinding。
若要進行這個步驟,您可以將個別的繫結項目加入到由 BindingElementCollection 類別之執行個體所表示的集合,然後,將 CustomBinding 的 Elements 屬性設定為等同於該物件的項目。必須按照下列順序加入繫結項目:Transaction Flow、Reliable Session、Security、Composite Duplex、One-way、Stream Security、Message Encoding 然後是 Transport。請注意,並非每個繫結都需要所列的所有繫結項目。
SecurityBindingElement
有三個繫結項目與訊息層級安全性相關,這些項目全都衍生自 SecurityBindingElement 類別。這三個項目分別是 TransportSecurityBindingElement、SymmetricSecurityBindingElement 和 AsymmetricSecurityBindingElement。TransportSecurityBindingElement 用於提供混合模式安全性。當訊息層提供安全性時,則使用另外兩個項目。
當傳輸層提供安全性時,會使用其他的類別:
必要的繫結項目
有很多可能的繫結項目可以與任一繫結進行結合。但是並非所有的組合都有效。本節會說明安全性繫結中必須要有的項目。
有效的安全性繫結會因為許多因素而異,包括:
安全性模式。
傳輸通訊協定。
合約中指定的訊息交換模式 (MEP)。
下表針對前述的因素,列出每一個組合的有效繫結項目堆疊組態。請注意,這些都是基本需求。您可以將其他繫結項目加入繫結中,如訊息編碼繫結項目、交易繫結項目以及其他繫結項目。
安全性模式 | 傳輸 | 合約訊息交換模式 | ||||
---|---|---|---|---|---|---|
|
|
Datagram |
Request Reply |
Duplex |
||
傳輸 |
Https |
|||||
|
|
OneWayBindingElement |
||||
HttpsTransportBindingElement |
HttpsTransportBindingElement |
|||||
|
TCP |
|||||
|
|
OneWayBindingElement |
||||
SSL 或 Windows StreamSecurityBindingElement |
SSL 或 Windows StreamSecurityBindingElement |
SSL 或 Windows StreamSecurityBindingElement |
||||
TcpTransportBindingElement |
TcpTransportBindingElement |
TcpTransportBindingElement |
||||
訊息 |
Http |
SymmetricSecurityBindingElement |
SymmetricSecurityBindingElement |
SymmetricSecurityBindingElement (驗證模式 = SecureConversation) |
||
|
CompositeDuplexBindingElement |
|||||
|
|
OneWayBindingElement |
|
OneWayBindingElement |
||
HttpTransportBindingElement |
HttpTransportBindingElement |
HttpTransportBindingElement |
||||
|
Tcp |
SecurityBindingElement |
SecurityBindingElement |
SymmetricSecurityBindingElement (驗證模式 = SecureConversation) |
||
TcpTransportBindingElement |
TcpTransportBindingElement |
TcpTransportBindingElement |
||||
混合式 (使用訊息認證的傳輸) |
Https |
TransportSecurityBindingElement |
TransportSecurityBindingElement |
|
||
|
|
OneWayBindingElement |
|
|
||
|
HttpsTransportBindingElement |
HttpsTransportBindingElement |
|
|||
|
TCP |
TransportSecurityBindingElement |
SymmetricSecurityBindingElement (驗證模式 = SecureConversation) |
SymmetricSecurityBindingElement (驗證模式 = SecureConversation) |
||
|
|
OneWayBindingElement |
||||
SSL 或 Windows StreamSecurityBindingElement |
SSL 或 Windows StreamSecurityBindingElement |
SSL 或 Windows StreamSecurityBindingElement |
||||
TcpTransportBindingElement |
TcpTransportBindingElement |
TcpTransportBindingElement |
請注意,SecurityBindingElements 有許多可以設定的項目。如需詳細資訊,請參閱 SecurityBindingElement 驗證模式.
如需詳細資訊,請參閱 安全對話與安全工作階段.
程序
若要建立使用 SymmetricSecurityBindingElement 的自訂繫結
建立名稱為
outputBec
之 BindingElementCollection 類別的執行個體。呼叫靜態方法 M:System.ServiceModel.Channels.SecurityBindingElement.CreateSspiNegotiationBindingElement(true),此方法會傳回 SymmetricSecurityBindingElement 類別。
將 SymmetricSecurityBindingElement 新增至集合 (
outputBec
),方法是呼叫 BindingElement 類別其 Collection 的 Add 方法。建立 TextMessageEncodingBindingElement 類別的執行個體,並將它新增至集合 (
outputBec
)。這會指定繫結使用的編碼方式。建立 HttpTransportBindingElement,並將它新增至集合 (
outputBec
)。這會指定繫結要使用 HTTP 傳輸。建立新自訂繫結,方式是建立 CustomBinding 類別的執行個體,並將
outputBec
集合傳遞至建構函式。產生的自訂繫結會有許多與標準 WSHttpBinding 相同的特性。它會指定訊息層級安全性和 Windows 認證,但停用安全工作階段,並要求指定超出範圍的認證,且不會加密簽章。最後一項只能透過依照步驟 4 的方式設定 MessageProtectionOrder 屬性來控制,其他兩項可透過使用標準繫結上的設定來控制。其他兩項可透過使用標準繫結上的設定來控制。
範例
描述
下列範例提供完整的函式,可建立使用 SymmetricSecurityBindingElement 的自訂繫結。
程式碼
Public Shared Function CreateCustomBinding() As Binding
' Create an empty Custom Binding to populate,
Dim binding As New CustomBinding()
' Create a SymmetricSecurityBindingElement.
Dim ssbe As SymmetricSecurityBindingElement
ssbe = SecurityBindingElement.CreateSspiNegotiationBindingElement(True)
' Add the SymmetricSecurityBindingElement to the BindingElementCollection.
binding.Elements.Add(ssbe)
binding.Elements.Add(New TextMessageEncodingBindingElement())
binding.Elements.Add(New HttpTransportBindingElement())
Return New CustomBinding(binding)
End Function
// Create an empty CustomBinding to populate
CustomBinding binding = new CustomBinding();
// Create a SymmetricSecurityBindingElement.
SymmetricSecurityBindingElement ssbe =
SecurityBindingElement.CreateSspiNegotiationBindingElement(true);
// Add the SymmetricSecurityBindingElement to the BindingElementCollection.
binding.Elements.Add(ssbe);
binding.Elements.Add(new TextMessageEncodingBindingElement());
binding.Elements.Add(new HttpTransportBindingElement());
return new CustomBinding(binding);
另請參閱
參考
SecurityBindingElement
TransportSecurityBindingElement
SymmetricSecurityBindingElement
CustomBinding