WCF开发工具在实际应用中可以给我们开发人员带来非常大的好处。特别是在安全性方面,其优势尤其明显。在这里,我们将会通过对WCF可靠性传输的基本内容做一个详细介绍,让大家充分掌握这方面的知识。#t#
WCF与其他面向服务技术之间(asp.net \j2ee Web Service技术等)***的区别在于WCF可靠性传输(Transport Reliability)与消息可靠性(Message Reliability)。传输可靠性(例如通过TCP传输)在网络数据包层提供了点对点保证传递(Point-to-Point Guaranteed Delivery),以确保数据包的顺序无误。传输可靠性不会受到网络连接的中断或其他通信问题的影响。消息可靠性提供了端对端保证传递(End-to-End Guaranteed Delivery),确保消息的顺序无误。消息可靠性与引入的中间方的数量无关,与网络跳数(Network Hops)的数量也没有关联。消息可靠性基于一个行业标准。该行业标准为可靠的基于消息的通信维持了一个在传输层的会话。如果传输失败,例如无线连接中断,消息可靠性就会重试(Retries)功能。它还能够自动处理网络阻塞(Congestion)、消息缓存(Message Buffering)以及流控制(Flow Control),根据具体情况适时调整发送的消息数。消息可靠性还能够通过对连接的验证管理连接自身,并在不需要连接时清除它们。
这里WCF可靠性传输首先来说数据传输同样依赖底层的网络传输协议,如TCP协议,TCP传输控制协议底层就是要求建立连接的状态进行数据传递。其次消息可靠性也是对已有消息可靠性行业标准的支持,WCF框架实现或者扩展了消息可靠性行业标准。
Web Service使用http/post/get/soap三种方式进行访问,http协议是请求/响应协议,不会维持特定的传输通道,本身是不支持可靠性。
【1.2】传输协议与WCF可靠性传输:
看来以上的介绍内容,我们再来介绍WCF绑定协议的可靠性,同样WCF的可靠性和具体的绑定协议弥补可分。总结了绑定、可靠性、有序传递(Ordered Delivery)以及它们各自的默认值之间的关系。可靠性与绑定对应关系如下:
BasicHttpBinding不支持可靠性,BasicHttpBinding面向旧的ASMX Web服务,是不具有可靠性的;
NetMsmqBinding不支持可靠性,MSMQ协议,使用消息队列,针对断开调用,不存在传输会话;
MsmqIntegrationBinding不支持可靠性;支持WCF与MSMQ协议通信,不存在传输会话;
NetPeerTcpBinding不支持可靠性。NetPeerTcpBinding则为广播场景设计。
WSDualHttpBinding支持可靠性的,建立两个http会话通道,保持回调通道,确保基于HTTP协议的客户端存在;
NetTcpBinding 支持可靠性,显然使用TCP传输数据。以及各种WS绑定,默认情况下并不支持可靠性,允许启用;
NetNamedPipeBinding绑定总是拥有一个确定的从客户端到服务的跳数,因而它的可靠性是绑定固有的;
WSFederationHttpBinding支持可靠性,支持联邦通信协议,支持在多个安全区域进行安全会话。
WS绑定协议一般都提供了对可靠性传递的支持,可以编程或者配置方式在项目里启用。可靠性传输要根据绑定的目标场景而定。
【1.3】有序消息:
TCP提供了差错和流量控制。WCF消息可靠性也以来具体的绑定协议底层的传输协议和自身扩展的机制确保了消息的有序传递,允许消息按照发送顺序而非接收顺序执行。我们在实际的WCF项目里及可以只启用可靠性,而不启用有序传递。
同样WCF也为我们提供了灵活的方式来配置也启用项目中的WCF可靠性传输和传递的有序性,你可以使用配置文件方式也可以使用编程方式实现。如果我们启用了可靠性,则客户端与服务端必须保持配置一致,否则客户端无法与服务通信。我们可以只对支持它的绑定配置可靠性。下面我们就来进行详细的介绍。