1.服务总线
运行在组织内部的应用提供了WCF创建的Web此服务,此服务可以连接到组织外部的软件上。软件通常运行在Windows Azure这类云平台或其他组织内部。
在具体实现服务连接的过程中会出现很多问题。比如其他组织内部的客户端连接到Web服务时,需要知道如何定位到服务的终端。其他组织的软件请求需要确定如何通过服务器租用端的服务。网络地址转换(Network Address Tanslation,NAT)是十分普遍的,应用对外通常不会有一个固定的IP地址。那么,在没有使用从NAT的情况下,请求需要确定如何通过防火墙。
AppFabrie中,服务总线(Service BUS)解决了这些问题,如图4-21所示,一个WCF服务可以通过服务总线注册终端,然后由客户端发现和使用这些终端访问服务。
开始时,WCF服务注册一个或多个服务总线的终端(图4-21中步骤1)。对于每个注册的终端,服务总线都会显示其通信终端(步骤2)。服务总线分配一个URI口令给组织,组织通过这个服可以自由创建命名层次。这样,终端就被分配了具体的URIs。
在提供了终端URI的情况下,客户端可通过服务总线注册(步骤3)发现终端。这个请求使用了Atom Publishing Protocol,并且返回了一个AtomPub服务参考文档到代表应用的终端服务总线上去。在上述工作完成后,客户端可以调用通过上述显示终端的服务操作(步骤4)。对于每个服务总线接受请求,调用WCF服务显示的终端通信操作 (步骤5)。
用户服务需要使用AppFabric服务总线的开放TCP连接显示终端,并保持这个连接一直处于开放的状态,这就解决了两个问题:一是解决了问题,服务总线上的开放连接可以路由到应用程序;二是由于连接是在防火墙内初始化的,所以通过连接将消息传回应用时防火墙不会阻止该消息。
服务总线也提高了安全性。由于客户端只可以看见服务总线提供的一个IP地址,看不到内部的IP地址。服务总线充当了一个外部DMZ(Demilitarized,隔离区)的角色,起到了间接阻止攻击的作用。
通过服务总线展示其服务的应用一般是使用WCF实现,客户端可以由或其他技术创建,比如Java等。这些客户端创建完成之后,他们可以通过TCP、HTTP或者HTTPS发送请求。应用同样可以自由地使用自己的安全机制,比如加密、屏蔽通信攻击等等
服务总线提供了以下一些有用的特征。
(1)支持消息缓冲。消息缓冲是通过一个简单的队列来实现的。客户端可以放置一个多达256MB大小的消息到消息缓冲池中去,而不需要客户端直接响应服务。存储消息持久存放在磁盘上,服务可以从磁盘上读取这些被放置的消息。为了防止故障的发生,存放的消息通常需要进行备份,与Windows Azure平台上消息备份方式相同。
(2)多个WCF服务监听同一个URI。服务总线通过监听服务随机传播客户端请求,为WCF服务提供负载均衡和容错能力。