在一个典型的服务调用场景中,具有两个基本的角色,即服务的消费者和服务的提供者。从消息交换的角度讲前者一般是消息的最初发送者,而后者则是消息的最终接收者。在很多情况下,由于网络环境的局限,消息的最初发送者和最终接收者不能直接进行消息交换,这就需要一个辅助实现消息路由的中介服务,这就是我们接下来要介绍的路由服务。
目录
一、路由服务就是一个WCF服务
路由服务契约的定义
路由服务契约的定义
二、基于消息内容的路由策略
RoutingBehavior服务行为
消息筛选器
筛选器表
路由服务,就其本质而言就是一个WCF服务,具体的消息路由操作实现在该服务的某个操作之中。和其他一般的服务比较,并没有太多不同之处。在使用路由服务之前,我们也需要像一般的服务一样对其进行寄宿,并为之指定一个基于某种绑定的终结点。对于需要被路由的服务的客户端,除了需要将路由服务的地址作为其消息发送的物理地址之外,它依然像普通的方式一样对目标服务进行调用。
路由服务的定义
既然路由服务本质上就是一个WCF服务,它肯定就对应着某个实现相应服务契约的类型,这个类型就是RoutingService。下面的代码片断给出了RoutingService的成员定义。
1: [AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
2: [ServiceBehavior(AddressFilterMode=AddressFilterMode.Any,
3: InstanceContextMode=InstanceContextMode.PerSession,
false,
false)]
class RoutingService : ISimplexDatagramRouter,
7: ISimplexSessionRouter,
8: IRequestReplyRouter,
9: IDuplexSessionRouter,
10: IDisposable
11: {
//ISimplexDatagramRouter
13: [OperationBehavior(Impersonation = ImpersonationOption.Allowed)]
object state);
void ISimplexDatagramRouter.EndProcessMessage(IAsyncResult result);
16:
//ISimplexSessionRouter
18: [OperationBehavior(Impersonation = ImpersonationOption.Allowed)]
object state);
void ISimplexSessionRouter.EndProcessMessage(IAsyncResult result);
21:
//IRequestReplyRouter
23: [OperationBehavior(Impersonation = ImpersonationOption.Allowed)]
object state);
25: Message IRequestReplyRouter.EndProcessRequest(IAsyncResult result);
26:
//IDuplexSessionRouter
28: [OperationBehavior(Impersonation=ImpersonationOption.Allowed)]
object state);
void IDuplexSessionRouter.EndProcessMessage(IAsyncResult result);
31:
void IDisposable.Dispose();
33: }