目录html
二 WCF模型安全
三 WCF体系架构服务器
五 编码规范多线程
SOA是一种经过为全部软件提供服务外观,并将这些服务的WSDL集中发布到一个地方的一种组织企业软件的方法。它经过使用明肯定义的接口经过跨越边界传递消息来让多个自治的服务协同工做。SOA的真正价值是——容许开发者从代码中抽取出公共基础功能的实现,更多地关注业务逻辑和须要的功能特性。在开发SOA应用程序时,咱们可以实现服务代码与客户端使用技术与平台的解耦,也与并发管理、事务传播和管理以及通讯可靠性、协议和模式无关。并发
SOA的4个主要设计原则以及在WCF中的具现以下:框架
以上原则比较抽象,为了更好的设计SOA程序,应该遵照如下原则:异步
可选原则以下:
微软的WCF框架中的基础设施为咱们解决了以上原则中的多数,使咱们能够将关注点从新回归的业务逻辑层上。面向服务技术展现出的魅力,促使愈来愈多的开发者投入其中。
WCF的体系架构以下:
WCF的客户端与服务端模型以下:
1 地址
WCF的每个服务都有惟一的地址。地址包括服务位置和传输协议(传输样式)。服务位置包括目标机器名、站点、网络、端口、管道或队列,以及一个可选的特定路径或者URI。
地址经常使用格式为:[基地址]/[可选的URI],如“net.tcp://localhost:8081/MyService”。
基地址经常使用格式为:[传输协议]://[机器名或域名][:可选端口],如“net.tcp://localhost:8081”。
WCF支持多种传输样式:
2 绑定
绑定将通讯模式与交互方式直接的组合进行规范,将这些通讯特征合理地组合在一块儿。一个绑定封装了诸如传输协议、消息编码、可靠性、安全性、事务传播以及互操做性等相关选项的组合,使得它们保持一致。
WCF定义了六种经常使用的绑定:
经常使用绑定的传输协议与编码格式以下:
名字 | 传输协议 | 编码格式 | 互操做性 |
BasicHttpBinding | HTTP/HTTPS | Text,MTOM | yes |
NetTcpBinding | TCP | Binary | no |
NetNamedPipeBinding | IPC | Binary | no |
WSHttpBinding | HTTP/HTTPS | Text,MTOM | yes |
WSDualHttpBinding | HTTP | Text,MTOM | no |
NetMsmqBinding | MSMQ | Binary | no |
注意:TCP、IPC和MSMQ绑定使用的二进制编码器是WCF专有的,不要试图为其编写针对其余平台的自定义解析器。
3 契约
WCF的全部服务都公开为契约,契约与平台无关,是描述服务功能的标准方式。WCF包含4类契约:
4 终结点
终结点是WCF进行通讯的惟一手段,ChannelFactory<T>本质上是经过制定的终结点建立用于进行服务调用的服务代理。终结点在WCF体系中经过Systtm.ServiceModel.Description.ServiceEndpoint类型表示,其包含三个核心属性——地址、绑定、契约。终结点是用来发送和接收消息的构造,终结点是真正意义上的接口,它包含了一个对象接口所需的所有信息。每一个服务至少必须公开一个业务终结点,每一个终结点有且只能拥有一个契约。服务上的全部终结点都包含了惟一的地址,而一个单独的服务则能够公开多个终结点。这些结点可使用相同或不一样的绑定,公开相同或不一样的契约。
5 元数据
服务的元数据描述服务的特征,外部实体须要了解这些特征以便与该服务进行通讯。服务的元数据包括XML、架构文档(用于定义服务的数据协定)和WSDL文档(用于描述服务的方法)。启用元数据后,WCF经过检查服务及其终结点自动生成服务的元数据。
6 上下文
WCF上下文将服务宿主与公开本地CLR类型为服务的上下文组合在一块儿,上下文是服务实例最核心的执行范围,上下文能够为空,即不包含任何服务实例。
7 宿主
WCF服务类不能凭空存在,每一个WCF服务类必须托管在某个宿主进程中。单个宿主进程能够托管多个服务,而相同的服务类型也能够托管在多个宿主进程中,若是服务与客户端驻留在相同的进程中,则称为进程内托管。经常使用宿主以下:
WCF宿主体系结构以下:
每一个.NET宿主进程都包含了多个应用程序域,每一个应用程序域包含零到多个宿主实例,每一个服务宿主实例专门对于于一个特殊的服务类型。所以,建立一个宿主实例,实际上就是为对应于基地址的宿主机器的类型注册一个包含了全部终结点的服务宿主实例。每一个服务宿主实例拥有零到多个上下文。一个上下文能够与零个或一个服务实例关联。
8 代理
WCF不容许客户端直接与服务交互,客户端使用代理将调用转发给服务。即便对象是本地的,WCF仍然使用远程编程模型的实例化方式,而且使用代理。
(一) 通道栈模型
WCF通道模型:
不管交互的另外一方的具体位置在哪里,WCF都会为消息的发送和接收创建一套完整的消息管道,这个消息管道被成为通道栈。通道栈中的每个通道组件都有机会对消息进行处理,而整个通道栈是可编辑且可插入的,这就确保WCF的通道模型具备至关大的灵活性。另外,WCF通道模型是彻底和上层程序隔离的,任何一个服务/客户端均可以轻松配置到不一样的通道模型上去。通道模型能够被分为两部分——协议通道和传输通道。一个通道栈能够拥有任意多个协议通道,但通常只拥有一个传输通道。传输通道负责把消息进行编码而且发送到远端,编码时须要使用调用栈的编码器。通常而言,协议通道负责维护消息的非业务逻辑功能,包括:事务、日志、可靠消息、安全性等。开发者能够自定义协议通道并插入到通道栈中。在一个通道栈中,必须包含至少一个传输通道和编码器,传输通道负责把消息编码和发送。(传输通道会尝试从BindingContext对象中查找编码器,若是没有找到则会使用默认的编码器,在完成消息的编码以后,传输通道负责把消息发送到远端,不一样的传输通道将使用不一样的传输协议,如HTTP、TCP、IPC等。)
WCF体系体系架构是基于拦截机制的,经过代理与客户端的交互意味着WCF老是处于服务与客户端之间,拦截全部的调用,执行调用前和调用后的处理。当代理将调用栈帧序列化到消息中,并将消息经过通道链向下传递时,WCF就开始执行拦截。通道至关于一个拦截器,目的在于执行一个特定的任务。每一个客户端通道都会执行消息的调用前处理。链的组成与结构主要依赖于绑定。客户端的最后一个通道是传输通道,根据配置的传输方式发送消息给宿主。在宿主端,消息一样经过通道链进行传输,它会对消息执行宿主端的调用前处理。宿主端的第一个通道是传输通道,接收传输过来的消息。随后的通道执行不一样的任务。宿主端的最后一个通道负责将消息传递给分发器。分发器将消息转换到一个栈帧,并调用服务实例。事实上,服务会被本地客户端——分发器调用。客户端与服务端的拦截器确保了它们可以得到运行时环境,以便于它们执行正确的操做。
服务实例会执行调用,而后将控制权返回给分发器。分发器负责将返回值以及错误信息转换为一条返回消息。分发器得到控制权,执行的过程恰好相反:分发器经过宿主端通道传递消息,执行调用后的处理,如管理事务、加密等。为了执行客户端调用后的处理,包括解密、解码、提交或取消事务等任务,传输通道会将返回消息发送到客户端通道。最后一个通道将消息传递给代理。代理将返回消息转化到栈帧,而后将控制权返回给客户端。
(二) 消息交换模式
WCF定义的6种消息交换模式:
1 请求-响应模式
客户端向服务器发送一个请求,等待服务器的响应,等待时间是一个预约义的时间,是最经常使用的模式。WCF中经过在接口上定义[ServiceContact]和[OperationContract]来表示请求和响应的细节。
2 单工消息处理模式
只按一个方向把消息从客户端发送到服务器,服务器只处理消息,但不返回处理结果。这种模式最大的价值在于可以实现异步通讯以及保证消息传送环境的能力,利用单工模式,能够经过MSMQ来发送消息。WCF经过把[OperationContract]的IsOneWay设置为True,来实现单工模式。
3 双工消息处理模式
客户端和服务端相互调用,客户端和服务端的角色也在不断交替。为了完成回调,服务端必须知道回调操做的方法签名,并且该回调操做将同时出如今客户端和服务端中。为此,在WCF中实现双工模式,须要在它的绑定信息中说明,在客户端实现的方法签名须要在服务层定义,同时须要这些方法在客户端实现,这样服务端才能调用他们。
4 流模式
客户端发起一个请求,请求一个很是大的数据,服务把数据分割为小块,并把这些数据块按使用顺序逐个地发送给客户端。在这种模式下,一个数据请求紧跟着多个响应,每一个响应都包含了所有数据的一个子集,由发送者在最后的消息中标识数据流的结束,以告知客户端不须要继续等待更多的数据。
5 发布-订阅模式
发布-订阅模式中,发布者不关心是否有订阅者,它只关心从本身的系统中发送数据。这种模式表示了一种驱动方法,即发布者在客户端应用程序中启动一个事件,客户端针对这些事件做出响应。WCF不直接支持发布-订阅模式,而是利用与双工模式相同的构造来实现发布-订阅模式。发布-订阅模式的实现经过一个订阅服务,此服务在内存中保存订阅者回调通道的引用。当服务须要向全部订阅者发送数据时,它便循环地访问这些订阅者,并调用一个方法来发送数据。这里没有使用轮询的方法,是由于订阅者起宿主的做用,它在等待被服务调用的方法。
6 隐式顺序调用模式
在该模式中,客户端以某个顺序调用服务端的多个操做。隐式顺序调用模式容许定义逻辑顺序中最后调用的方法,此后客户端将不能再调用其它方法。WCF使用[OperationContract]定义操做的调用顺序,把方法的IsInitiating设置为false,能够起动一个会话;把IsTerminating设置为true,表示调用这个方法以结束会话。(另外一种实现方式,是借助工做流。)
(三) 通道形状
WCF中经过通道形状来实现具体的消息交换模式,通道形状则是只继承自IChannel的一组接口,WCF会根据上层协议来自动选取须要的通道形状。消息交换模式与通讯协议是密切相关的,经过在传输通道上层添加特殊的协议通道,能够强制使用某种传输通道不支持的消息交换模式。(OneWayBindingElement单工模式和CompositeDuplexElement双工模式)
(四) 通道管理器
WCF中实现了两类通道管理器,分别实现IChannelListener<T>和IChannelFactory<T>。IChannelListener<T>负责接收端的信息交换控制工做,负责侦听消息、创建通道栈,而且经过通道栈顶层通道的引用,它能够独立于它的通道栈而关闭。ServiceHost内部就是使用了IChannelListener<T>来实现通道的管理。IChannelListener<T>负责在发送端控制消息的发送以及建立并管理通道栈,而且负责关闭通道栈,通常使用ClientBase<T>来代替直接使用IChannelFactory<T>。
(五)ICommunicationObject
WCF的ICommunicationObject定义了状态机制的统一模型。基本全部的通讯组件,包括通道和通道管理器都实现了ICommunicationObject。ICommunicationObject用于状态管理,其定义了改变状态的方法、状态改变触发的事件已经当前状态的获取。ICommunicationObject的State为CommunicationState枚举类型,用于表示“状态”,有6种可用状态,分别为:Created(已建立),Opening(打开中),Opened(已打开),Closing(关闭中),Closed(已关闭),Faulted(错误),其状态变化顺序以下:
由上图可见,状态机的改变是只进的,状态的改变是不可逆的。
做者:MeteorSeed
感谢您阅读本文,若是您以为有所收获,麻烦点一下右边的“推荐”,您的支持是对我最大的鼓励...
转载请注明出处。
转自http://www.cnblogs.com/MeteorSeed/archive/2012/04/24/2399455.html