了解WCF定制的绑定类型(2)_绑定元素
来源:互联网 发布:闲鱼 淘宝二手官网迈腾 编辑:程序博客网 时间:2024/06/01 08:12
WCF中绑定是由不同的绑定元素有序组成,其中有负责传输的元素(继承自TransportBindingElement并以TransportBindingElement结尾),有负责消息编码的元素(继成自MessageEncodingBindingElement并以其结尾),有负责安全的元素(继承自SecurityBindingElement并以此结尾),也有一些负责其它的一些元素(例如事务等)。负责传输的绑定元素和负责消息编码的绑定元素一般是一个绑定必备的绑定元素。
通过反射可以了解系统中所有的绑定元素及其分类:
程序为(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 HttpTransportBindingElementBasicHttpContextBinding ContextBindingElement TextMessageEncodingBindingElement HttpTransportBindingElementNetTcpBinding TransactionFlowBindingElement BinaryMessageEncodingBindingElement WindowsStreamSecurityBindingElement TcpTransportBindingElementNetTcpContextBinding ContextBindingElement TransactionFlowBindingElement BinaryMessageEncodingBindingElement WindowsStreamSecurityBindingElement TcpTransportBindingElementWSHttpBinding TransactionFlowBindingElement SymmetricSecurityBindingElement TextMessageEncodingBindingElement HttpTransportBindingElementWSHttpContextBinding ContextBindingElement TransactionFlowBindingElement SymmetricSecurityBindingElement TextMessageEncodingBindingElement HttpTransportBindingElementMsmqIntegrationBinding MsmqIntegrationBindingElementNetMsmqBinding BinaryMessageEncodingBindingElement MsmqTransportBindingElementNetNamedPipeBinding TransactionFlowBindingElement BinaryMessageEncodingBindingElement WindowsStreamSecurityBindingElement NamedPipeTransportBindingElementNetPeerTcpBinding PnrpPeerResolverBindingElement BinaryMessageEncodingBindingElement PeerTransportBindingElementWSFederationHttpBinding TransactionFlowBindingElement SymmetricSecurityBindingElement TextMessageEncodingBindingElement HttpTransportBindingElementWS2007FederationHttpBinding TransactionFlowBindingElement SymmetricSecurityBindingElement TextMessageEncodingBindingElement HttpTransportBindingElementWS2007HttpBinding TransactionFlowBindingElement SymmetricSecurityBindingElement TextMessageEncodingBindingElement HttpTransportBindingElementWSDualHttpBinding 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 HttpTransportBindingElementBasicHttpBinding MtomMessageEncodingBindingElement HttpsTransportBindingElement
- 了解WCF定制的绑定类型(2)_绑定元素
- 了解WCF定制的绑定类型(1)_信道范型支持
- WCF绑定类型选择
- wcf 绑定类型
- 获取WCF所支持的绑定类型
- WCF stuff(2) 绑定
- WCF绑定的选择
- WCF绑定的选择
- WCF源码(绑定)
- WCF 绑定(Binding)
- WCF系列:Binding模型 绑定元素(Binding Element)
- [WCF的Binding模型]之五:绑定元素(Binding Element)
- WCF绑定
- WPF元素的绑定
- 个别元素的绑定(<%:Html.DropDownListFor()%>)
- [WCF中的Binding模型]之六(完结篇):从绑定元素认识系统预定义绑定
- 真正的了解事件绑定
- 绑定未来元素的事件
- shell编程基础
- 选择和图像控件
- flex 载入数据
- C# 算兔子的算法 要求用递归
- flex 访问webservice
- 了解WCF定制的绑定类型(2)_绑定元素
- webservice服务器端以及使用,结合前面两个内容
- plsql配置 orcale基本语法 中文乱码
- UML
- UML建模
- 关于android基于LINUX的SDK问题
- python3之python的核心数据类型(字符串)
- 在httpd.conf加入代码防盗链
- C# 合理使用ToolTip