Routningskontrakt
Routningskontrakt definierar de meddelandemönster som routningstjänsten kan bearbeta. Varje kontrakt är typlöst och gör att tjänsten kan ta emot ett meddelande utan att känna till meddelandeschemat eller åtgärden. På så sätt kan routningstjänsten dirigera meddelanden generiskt utan ytterligare konfiguration för de underliggande meddelanden som dirigeras.
Routningskontrakt
Eftersom routningstjänsten accepterar ett allmänt WCF-meddelandeobjekt är det viktigaste när du väljer ett kontrakt formen på den kanal som ska användas när du kommunicerar med klienterna och tjänsterna. Vid bearbetning av meddelanden använder routningstjänsten symmetriska meddelandepumpar, så vanligtvis måste formen på det inkommande kontraktet matcha formen på det utgående kontraktet. Det finns dock fall där tjänstmodellens dispatcher kan ändra formerna, till exempel när avsändaren konverterar en duplex-kanal till en kanal för begärandesvar eller tar bort sessionsstödet från en kanal när den inte krävs och inte används (det vill: när SessionMode.Allowed konverterar en IInputSessionChannel till en IputInputChannel).
För att stödja dessa meddelandepumpar tillhandahåller routningstjänsten kontrakt i System.ServiceModel.Routing namnområdet, som måste användas när du definierar tjänstslutpunkterna som används av routningstjänsten. Dessa kontrakt är typlösa, vilket gör att du kan ta emot alla typer av meddelanden eller åtgärder, och gör att routningstjänsten kan hantera meddelanden utan att känna till det specifika meddelandeschemat. Mer information om kontrakt som används av routningstjänsten finns i Routningskontrakt.
Kontrakten som tillhandahålls av routningstjänsten finns i System.ServiceModel.Routing namnområdet och beskrivs i följande tabell.
Contract | Form | Kanalform |
---|---|---|
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 |