路由合約會定義路由服務可以處理的訊息模式。 每個合約都是無型別的,可讓服務在不知道訊息架構或動作的情況下接收訊息。 這允許路由服務以一種通用方式傳送訊息,而不需針對基礎訊息的特性進行額外設定。
路由合約
因為路由服務接受一般 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 |