路由协定

路由协定定义路由服务可处理的消息模式。 每个协定都是无类型协定,允许服务在不了解消息架构或操作的情况下接收消息。 这样,路由服务就可以按照通常方式来路由消息,而不必对路由的基础消息的细节进行额外配置。

路由协定

由于路由服务接受泛型 WCF 消息对象,因此,在选择协定时,首先需要考虑与客户端和服务通信时将采用的通道的形状。 路由服务在处理消息时使用对称消息泵,因此,入站协定的形状通常必须与出站协定的形状匹配。 但是,在一些情况中,服务模型的调度程序可以修改这些形状。例如下面的情况:调度程序将双工通道转换为请求-答复通道,或者在不需要且未使用会话支持时从通道中删除此支持(即,在启用 SessionMode.Allowed 的情况下将 IInputSessionChannel 转换为 IInputChannel 时)。

为了支持这些消息泵,路由服务在 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

另请参阅