Dela via


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

Se även