路由协定定义路由服务可以处理的消息模式。 每个协定都是无类型的,允许服务在不知道消息架构或作的情况下接收消息。 这样,路由服务就可以一般地路由消息,而无需为要路由的基础消息的具体细节配置。
路由协定
由于路由服务接受泛型 WCF 消息对象,因此选择协定时最重要的注意事项是与客户端和服务通信时将使用的通道的形状。 处理消息时,路由服务使用对称消息泵,因此通常入站协定的形状必须与出站协定的形状匹配。 在某些情况下,服务模型的调度程序可以修改信道的形状。例如,当调度程序将双工信道转换为请求-答复信道,或者在不需要且未使用会话支持时,会将其移除(即< c0 >SessionMode.Allowed < /c0 >,这会将< c1 >IInputSessionChannel < /c1 >转换为< c2 >IInputChannel < /c2 >)。
为了支持这些消息泵,路由服务在命名空间中 System.ServiceModel.Routing 提供协定,在定义路由服务使用的服务终结点时必须使用该协定。 这些协定是无类型协定,允许接收任何消息类型或作,并允许路由服务处理消息,而不知道特定的消息架构。 有关路由服务使用的协定的详细信息,请参阅 路由协定。
路由服务提供的协定位于命名空间中 System.ServiceModel.Routing ,如下表所述。
合约 | 形状 | 通道形状 |
---|---|---|
ISimplexDatagramRouter | SessionMode = SessionMode.Allowed AsyncPattern = true IsOneWay = true |
IInputChannel -> IOutputChannel |
ISimplexSessionRouter | SessionMode = SessionMode.Required AsyncPattern = true IsOneWay = true |
IInputSessionChannel -> IOutputSessionChannel |
IRequestReplyRouter | SessionMode = SessionMode.Allowed AsyncPattern = true |
IReplyChannel -> IRequestChannel |
IDuplexSessionRouter | SessionMode=SessionMode.Required CallbackContract=typeof(ISimplexSession) AsyncPattern = true IsOneWay = true TransactionFlow(TransactionFlowOption.Allowed) |
IDuplexSessionChannel -> IDuplexSessionChannel |