WCF技术剖析(卷1)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3.1 服务的角色

对于习惯客户端/服务端模型的人,习惯将对外提供某种功能实现的称为服务端(Service),将功能的使用者称之为客户端(Client)。按照SOA的原理,面向服务和面向对象一样,仅仅是一种关注点(concern)分解的方式。面向服务就是将关注点分解成一个个自治的、相对独立的服务,服务之间通过松耦合的方式进行交互。从这个意义上讲,SOA下服务的范围是很宽泛的,能够向外界提供某项独立功能的对象都可以称为服务。按照实现具体功能,服务具有不同的粒度,而且服务具有可组合性,一个服务可以将若干子服务进行组合、编排以完成一个完整的功能。

在一个具体的服务调用中,传统的客户端和服务端更准确的定义应该是服务的提供者(Service Provider)和服务的消费者(Service Consumer)。同一个服务,在不同的场景中担当着不同的角色:如果它为别人提供某种功能的实现调用,那么它就是服务的提供者,反之,倘若该服务须要调用其他的服务以完成某项功能的实现,那么它是一个服务的消费者。而从消息交换(message exchange)的角度来讲,服务的消费者向服务的提供者发送请求消息,如图2-7所示。

图2-7 服务消费者-服务提供者

除了上述这两种典型的角色之外,在很多情况下一个服务还具有第三种角色:中介服务。中介服务一般并不提供具体业务功能的实现,而是将接收到的请求转发给对应的最终的服务提供者。比如,提供负载均衡功能的服务,它的功能就是接收所有服务消费的请求,并将其转发到部署在低负载主机中的服务,如图2-8所示。

图2-8 服务消费者-中介服务-服务提供者

对于基于SOAP的消息交换来说,可以根据中介服务是否修改SOAP消息报头的内容将中介服务分为被动中介和主动中介。被动中介服务根据SOAP消息报头的内容,或者既定的路由算法确定路由的路径;而主动中介服务在完成路由工作的过程中,为了某些功能的实现,须要添加新的SOAP消息报头,或者修改现有消息报头的内容。