Routeringscontracten
Routeringscontracten definiƫren de berichtpatronen die de Routeringsservice kan verwerken. Elk contract is typeloos en stelt de service in staat een bericht te ontvangen zonder kennis van het berichtschema of de actie. Hierdoor kan de routeringsservice berichten algemeen routeren zonder aanvullende configuratie voor de specifieke kenmerken van de onderliggende berichten die worden gerouteerd.
Routeringscontracten
Omdat de routeringsservice een algemeen WCF-berichtobject accepteert, is de belangrijkste overweging bij het selecteren van een contract de vorm van het kanaal dat wordt gebruikt bij het communiceren met de clients en services. Bij het verwerken van berichten gebruikt de Routeringsservice symmetrische berichtpompen, dus in het algemeen moet de vorm van het binnenkomende contract overeenkomen met de vorm van het uitgaande contract. Er zijn echter gevallen waarin de dispatcher van het servicemodel de shapes kan wijzigen, bijvoorbeeld wanneer de dispatcher een dubbelzijdig kanaal converteert naar een aanvraag-antwoordkanaal, of de sessieondersteuning van een kanaal verwijdert wanneer deze niet vereist is en niet wordt gebruikt (dat wil gezegd, wanneer SessionMode.Allowed een IInputSessionChannel converteert naar een IInputChannel).
Ter ondersteuning van deze berichtpompen biedt de Routeringsservice contracten in de System.ServiceModel.Routing naamruimte, die moet worden gebruikt bij het definiƫren van de service-eindpunten die worden gebruikt door de Routeringsservice. Deze contracten zijn typeloos, waardoor elk berichttype of elke actie kan worden ontvangen en de routeringsservice berichten kan verwerken zonder kennis van het specifieke berichtschema. Zie Routeringscontracten voor meer informatie over de contracten die door de routeringsservice worden gebruikt.
De contracten van de routeringsservice bevinden zich in de System.ServiceModel.Routing naamruimte en worden beschreven in de volgende tabel.
Contract | Vorm | Kanaalshape |
---|---|---|
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 |