通過反射可以瞭解系統中所有的綁定元素及其分類:
程序爲(vs 2010 .NET v4.0.30319):
Module[] ChannelMods = Assembly.LoadWithPartialName("System.ServiceModel").GetModules();
foreach (Module mod in ChannelMods)
{
Console.WriteLine("負責傳輸的綁定元素:");
foreach (Type type in mod.GetTypes())
{
if (type.Name.EndsWith("TransportBindingElement")&&!type.IsAbstract)
{
Console.WriteLine(" "+type.Name);
}
}
Console.WriteLine("負責消息編碼的綁定元素:");
foreach (Type type in mod.GetTypes())
{
if (type.Name.EndsWith("MessageEncodingBindingElement") && !type.IsAbstract)
{
Console.WriteLine(" " + type.Name);
}
}
Console.WriteLine("負責安全的綁定元素:");
foreach (Type type in mod.GetTypes())
{
if (type.Name.EndsWith("SecurityBindingElement") && !type.IsAbstract)
{
Console.WriteLine(" " + type.Name);
}
}
Console.WriteLine("負責其它功能的綁定元素:");
foreach (Type type in mod.GetTypes())
{
if (!type.Name.EndsWith("TransportBindingElement") && !type.Name.EndsWith("MessageEncodingBindingElement") && !type.Name.EndsWith("SecurityBindingElement") && type.Name.EndsWith("BindingElement") && !type.IsAbstract)
{
Console.WriteLine(" " + type.Name);
}
}
}
結果爲:
負責傳輸的綁定元素:
HttpTransportBindingElement
HttpsTransportBindingElement
NamedPipeTransportBindingElement
TcpTransportBindingElement
MsmqTransportBindingElement
PeerTransportBindingElement
負責消息編碼的綁定元素:
BinaryMessageEncodingBindingElement
MtomMessageEncodingBindingElement
TextMessageEncodingBindingElement
負責安全的綁定元素:
SslStreamSecurityBindingElement
WindowsStreamSecurityBindingElement
AsymmetricSecurityBindingElement
SymmetricSecurityBindingElement
TransportSecurityBindingElement
負責其它功能的綁定元素:
ChannelDemuxerBindingElement
ReplyAdapterBindingElement
NetTcpBindingElement
WSHttpBindingElement
ContextBindingElement
NetTcpContextBindingElement
WSHttpContextBindingElement
BasicHttpBindingElement
BasicHttpContextBindingElement
UnrecognizedAssertionsBindingElement
OneWayBindingElement
CompositeDuplexBindingElement
InternalDuplexBindingElement
CustomBindingElement
MexHttpBindingElement
MexHttpsBindingElement
MsmqIntegrationBindingElement
NetPeerTcpBindingElement
NetNamedPipeBindingElement
MexNamedPipeBindingElement
NetMsmqBindingElement
MexTcpBindingElement
PrivacyNoticeBindingElement
WSDualHttpBindingElement
WSFederationHttpBindingElement
UseManagedPresentationBindingElement
WS2007FederationHttpBindingElement
WS2007HttpBindingElement
MsmqIntegrationBindingElement
ReliableSessionBindingElement
SecuritySessionAuthenticatorBindingElement
AcceleratedTokenAuthenticatorBindingElement
PeerCustomResolverBindingElement
PnrpPeerResolverBindingElement
TransactionFlowBindingElement
每種綁定類型都有默認配置的綁定元素,可以通過無參的默認構造函數建立綁定類型,然後通過綁定類型的CreateBindingElements()方法獲取綁定元素集合,然後使用foreach遍歷獲知其默認的綁定類型。
具體函數如下:
static void DisplayBindingElements(Binding binding)
{
Console.WriteLine(binding.Name);
foreach (BindingElement be in binding.CreateBindingElements())
{
Console.WriteLine(" " + be.GetType().Name);
}
}
獲取的結果爲:
BasicHttpBinding
TextMessageEncodingBindingElement
HttpTransportBindingElement
BasicHttpContextBinding
ContextBindingElement
TextMessageEncodingBindingElement
HttpTransportBindingElement
NetTcpBinding
TransactionFlowBindingElement
BinaryMessageEncodingBindingElement
WindowsStreamSecurityBindingElement
TcpTransportBindingElement
NetTcpContextBinding
ContextBindingElement
TransactionFlowBindingElement
BinaryMessageEncodingBindingElement
WindowsStreamSecurityBindingElement
TcpTransportBindingElement
WSHttpBinding
TransactionFlowBindingElement
SymmetricSecurityBindingElement
TextMessageEncodingBindingElement
HttpTransportBindingElement
WSHttpContextBinding
ContextBindingElement
TransactionFlowBindingElement
SymmetricSecurityBindingElement
TextMessageEncodingBindingElement
HttpTransportBindingElement
MsmqIntegrationBinding
MsmqIntegrationBindingElement
NetMsmqBinding
BinaryMessageEncodingBindingElement
MsmqTransportBindingElement
NetNamedPipeBinding
TransactionFlowBindingElement
BinaryMessageEncodingBindingElement
WindowsStreamSecurityBindingElement
NamedPipeTransportBindingElement
NetPeerTcpBinding
PnrpPeerResolverBindingElement
BinaryMessageEncodingBindingElement
PeerTransportBindingElement
WSFederationHttpBinding
TransactionFlowBindingElement
SymmetricSecurityBindingElement
TextMessageEncodingBindingElement
HttpTransportBindingElement
WS2007FederationHttpBinding
TransactionFlowBindingElement
SymmetricSecurityBindingElement
TextMessageEncodingBindingElement
HttpTransportBindingElement
WS2007HttpBinding
TransactionFlowBindingElement
SymmetricSecurityBindingElement
TextMessageEncodingBindingElement
HttpTransportBindingElement
WSDualHttpBinding
TransactionFlowBindingElement
ReliableSessionBindingElement
SymmetricSecurityBindingElement
CompositeDuplexBindingElement
OneWayBindingElement
TextMessageEncodingBindingElement
HttpTransportBindingElement
這是默認的綁定元素組成,各種綁定類型會隨着參數的變化而選擇不同的綁定元素,下面的代碼生成了兩個BasicHttpBinding,但是因爲第二個使用不同的安全模式和消息編碼格式,使其使用不同的綁定元素。
BasicHttpBinding binding1 = new BasicHttpBinding();
BasicHttpBinding binding2 = new BasicHttpBinding();
binding2.MessageEncoding = WSMessageEncoding.Mtom;
binding2.Security.Mode = BasicHttpSecurityMode.Transport;
DisplayBindingElements(binding1);
DisplayBindingElements(binding2);
這將導致兩個綁定實例採用完全不同的綁定元素:
BasicHttpBinding
TextMessageEncodingBindingElement
HttpTransportBindingElement
BasicHttpBinding
MtomMessageEncodingBindingElement
HttpsTransportBindingElement