WCF中的Binding模型中NetTcpBinding:从绑定元素认识系统预定义绑定

 

到此为止,我们一共介绍了三种类型的绑定。从对于传输协议的支持来看,它们都就是基于HTTP或者HTTPS的绑定;从对标准的支持看来,BasicHttpBinding提供对WS-BP 1.1的支持,WsHttpBinding和WsDualHttpBinding则对WS-*新的协议提供很好的支持,比如WS-Transactions、WS-Reliable Messaging、WS-Security等等;从消息编码的角度来看,它们均支持基于纯文本的消息编码和MTOM编码。这些属性都决定了这三种绑定具有较好的互操作性,也就是说,对于此三种绑定的应用并不限于对于基于.NET平台应用的交互,如果通过这些绑定寄宿我们的服务,其他平台的客户端可以调用我们的服务,同理我们也可以利用基于这些绑定的客户端访问其他非.NET平台的Web服务,只要对方支持相应的标准。

接下来我们要介绍的另外三种绑定,相比之下就不具有如此好的互操作性,它们只能应用于单纯的WCF客户端和服务之间的交互。它们基于不同的传输协议,我们先来介绍基于TCP传输协议的NetTcpBinding。

我们照例采用列出绑定元素列表的方式分析绑定的特性,我们先通过下面的代码看看一个采用默认构造函数创建的NetTcpBinding对象会包含哪些绑丁元素。

 

程序运行后,下面4个绑定元素会被先后输出。我们借来分析一个NetTcpBinding对象在默认的情况下具有哪些特性:TcpTransportBindingElement表明采用TCP作为传输协议;WindowsStreamSecurityBindingElement提供基于Windows凭证的传输安全;BinaryMessageEncodingBindingElement实现基于二进制的消息编码;TransactionFlowBindingElement则提供对事务流转的支持。

1. System.ServiceModel.Channels.TransactionFlowBindingElement
2. System.ServiceModel.Channels.BinaryMessageEncodingBindingElement
3. System.ServiceModel.Channels.SslStreamSecurityBindingElement
4. System.ServiceModel.Channels.TcpTransportBindingElement

上面涉及的四个绑定元素,除了WindowsStreamSecurityBindingElement,相信有了前面的介绍,读者不会感到陌生。在这里我们来简单讨论一下WindowsStreamSecurityBindingElement。WindowsStreamSecurityBindingElement继承自System.ServiceModel.Channels.StreamUpgradeBindingElement,StreamUpgradeBindingElement是一种特殊的绑定元素。前面我们讲了,绑定元素的使命在于对相应信道的创建,而StreamUpgradeBindingElement的特别之处在于它并会参与信道的创建。StreamUpgradeBindingElement一般应用于基于流的传输(Stream Oriented Transport),比如TCP、命名管道等等。它一般位于TransportBindingElement之上,在传输层基础上提供进一步的升级处理(Transport Upgrade),比如安全加密、压缩等等。WindowsStreamSecurityBindingElement在这里的提供基于Windows客户端凭证的传输安全,与之相对的,还有一个System.ServiceModel.Channels.SslStreamSecurityBindingElement,提供基于SSL的传输安全。如果我们将绑定的客户端凭证的类型改成Certificate或者None,SslStreamSecurityBindingElement将会被采用:

 

WindowsStreamSecurityBindingElement将会被SslStreamSecurityBindingElement替换:

1. System.ServiceModel.Channels.TransactionFlowBindingElement
2. System.ServiceModel.Channels.BinaryMessageEncodingBindingElement
3. System.ServiceModel.Channels.SslStreamSecurityBindingElement
4. System.ServiceModel.Channels.TcpTransportBindingElement
 

除了对传输安全模式的支持(默认),NetTcpBinding也提供对消息安全模式提供支持,比如下面的代码中,再调用构造函数的时候直接将安全模式类型指定为:SecurityMode.Message。

 

实际上,如果采用消息安全模式,SymmetricSecurityBindingElement将会添加进来实现基于消息级别的签名、加密安全措施。这也可以从下面的输出结果看出来:

1. System.ServiceModel.Channels.TransactionFlowBindingElement
2. System.ServiceModel.Channels.SymmetricSecurityBindingElement
3. System.ServiceModel.Channels.BinaryMessageEncodingBindingElement
4. System.ServiceModel.Channels.TcpTransportBindingElement

除了单纯的传输安全模式和消息模式之外,NetTcpBinding还支持一种混合的安全模式,该模式的SecurityMode枚举值表示为:SecurityMode.TransportWithMessageCredential。该模式通过传输安全保障数据的一致性和保密性,通过消息安全提供身份验证。关于不同种类的安全模式,将在“安全”一章中进行详细讲解。SslStreamSecurityBindingElement和TransportSecurityBindingElement一起提供该模式的安全,如下面的代码所示:

    

输出结果:

1. System.ServiceModel.Channels.TransactionFlowBindingElement
2. System.ServiceModel.Channels.TransportSecurityBindingElement
3. System.ServiceModel.Channels.BinaryMessageEncodingBindingElement
4. System.ServiceModel.Channels.SslStreamSecurityBindingElement
5. System.ServiceModel.Channels.TcpTransportBindingElement


和WsHttpBinding一样,NetTcpBinding也提供对可靠会话的支持,以保障数据包或者消息的可靠、有序传递。不过与WsHttpBinding的实现机制不同的是,基于NetTcpBinding是采用TCP协议固有的可靠传输机制,比如消息确认机制、重发机制等等。下面的代码,通过ReliableSession.Enabled属性让绑定实现对可靠会话的支持:

 

和WsHttpBinding一样,通过ReliableSessionBindingElement实现对可靠会话的支持:

1. System.ServiceModel.Channels.TransactionFlowBindingElement
2. System.ServiceModel.Channels.ReliableSessionBindingElement
3. System.ServiceModel.Channels.BinaryMessageEncodingBindingElement
4. System.ServiceModel.Channels.WindowsStreamSecurityBindingElement
5. System.ServiceModel.Channels.TcpTransportBindingElement

由于NetTcpBinding采用TCP作为传输协议,所以它一般只应用于Intranet中;由于采用二进制的消息编码方式,在性能上较之基于文本的编码会有较大的提高;此外,由于和HTTP协议不同,TCP本身就是一个基于双工通信的协议,所以和WsDualBinding一样可以用于基于双工消息交换模式的WCF应用中。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值