Routeringsservice
De routeringsservice is een algemene SOAP-intermediair die fungeert als berichtrouter. De kernfunctionaliteit van de routeringsservice is de mogelijkheid om berichten te routeren op basis van berichtinhoud, waardoor een bericht kan worden doorgestuurd naar een clienteindpunt op basis van een waarde in het bericht zelf, in de koptekst of de berichttekst.
De RoutingService service wordt geïmplementeerd als een WCF-service (Windows Communication Foundation) in de System.ServiceModel.Routing naamruimte. De routeringsservice maakt een of meer service-eindpunten beschikbaar die berichten ontvangen en stuurt elk bericht vervolgens door naar een of meer clienteindpunten op basis van de berichtinhoud. De service biedt de volgende functies:
Routering op basis van inhoud
Serviceaggregatie
Serviceversiebeheer
Prioriteitsroutering
Dynamische configuratie
Protocol bridging
SOAP-verwerking
Geavanceerde foutafhandeling
Back-upeindpunten
Hoewel het mogelijk is om een intermediaire service te maken die een of meer van deze doelen bereikt, is een dergelijke implementatie vaak gekoppeld aan een specifiek scenario of een specifieke oplossing en kan deze niet gemakkelijk worden toegepast op nieuwe toepassingen.
De Routeringsservice biedt een algemene, dynamisch configureerbare, pluggable SOAP-intermediair die compatibel is met de WCF-service- en kanaalmodellen en waarmee u inhoudsgebaseerde routering van SOAP-berichten kunt uitvoeren.
Notitie
De routeringsservice biedt momenteel geen ondersteuning voor routering van WCF REST-services. Als u REST-aanroepen wilt routeren, kunt u overwegen om routering van toepassingsaanvragen te gebruikenSystem.Web.Routing.
Routering op basis van inhoud
Routering op basis van inhoud is de mogelijkheid om een bericht te routeren op basis van een of meer waarden in het bericht. De routeringsservice inspecteert elk bericht en stuurt het naar het doeleindpunt op basis van de inhoud van het bericht en de routeringslogica die u maakt. Routering op basis van inhoud biedt de basis voor serviceaggregatie, serviceversiebeheer en prioriteitsroutering.
Voor het implementeren van routering op basis van inhoud is de routeringsservice MessageFilter afhankelijk van implementaties die worden gebruikt om specifieke waarden binnen de berichten te routeren. Als een MessageFilter overeenkomt met een bericht, wordt het bericht doorgestuurd naar het doeleindpunt dat is gekoppeld aan het MessageFilter. Berichtfilters worden gegroepeerd in filtertabellen (FilterTableCollection) om complexe routeringslogica samen te stellen. Een filtertabel kan bijvoorbeeld vijf wederzijds exclusieve berichtfilters bevatten die ertoe leiden dat berichten worden gerouteerd naar slechts één van de vijf doeleindpunten.
Met de routeringsservice kunt u de logica configureren die wordt gebruikt om inhoudsgebaseerde routering uit te voeren en de routeringslogica tijdens runtime dynamisch bij te werken.
Door het groeperen van berichtfilters in filtertabellen, kan routeringslogica worden samengesteld waarmee u meerdere routeringsscenario's zoals:
Serviceaggregatie
Serviceversiebeheer
Prioriteitsroutering
Dynamische configuratie
Zie Inleiding en berichtfilters voor routering voor meer informatie over berichtfilters en filtertabellen.
Serviceaggregatie
Met behulp van routering op basis van inhoud kunt u één eindpunt beschikbaar maken dat berichten ontvangt van externe clienttoepassingen en vervolgens elk bericht doorstuurt naar het juiste interne eindpunt op basis van een waarde in het bericht. Dit is handig om één specifiek eindpunt te bieden voor verschillende back-endtoepassingen en om één toepassingseindpunt aan klanten te presenteren terwijl uw toepassing in verschillende services wordt meegenomen.
Serviceversiebeheer
Wanneer u migreert naar een nieuwe versie van uw oplossing, moet u mogelijk de oude versie parallel onderhouden om bestaande klanten te bedienen. Dit vereist vaak dat clients die verbinding maken met de nieuwere versie, een ander adres moeten gebruiken bij het communiceren met de oplossing. Met de routeringsservice kunt u één service-eindpunt beschikbaar maken dat beide versies van uw oplossing bedient door berichten naar de juiste oplossing te routeren op basis van versiespecifieke informatie in het bericht. Voor een voorbeeld van een dergelijke implementatie raadpleegt u Instructies: Serviceversiebeheer.
Prioriteitsroutering
Wanneer u een service voor meerdere clients levert, hebt u mogelijk een SLA (Service Level Agreement) met enkele partners waarvoor alle gegevens van deze partners afzonderlijk moeten worden verwerkt van die van andere clients. Met behulp van een filter dat zoekt naar klantspecifieke informatie in het bericht, kunt u eenvoudig berichten van specifieke partners routeren naar een eindpunt dat is gemaakt om te voldoen aan hun SLA-vereisten.
Dynamische configuratie
Ter ondersteuning van bedrijfskritieke systemen, waarbij berichten moeten worden verwerkt zonder serviceonderbrekingen, is het essentieel dat u de configuratie van onderdelen binnen het systeem tijdens runtime kunt wijzigen. Ter ondersteuning van deze behoefte biedt de Routeringsservice een IExtension<T> implementatie, de RoutingExtension, waarmee de configuratie van de routeringsservice tijdens runtime dynamisch kan worden bijgewerkt.
Zie Inleiding tot routering voor meer informatie over dynamische configuratie van de Routeringsservice.
Protocol Bridging
Een van de uitdagingen in tussenliggende scenario's is dat de interne eindpunten mogelijk andere transport- of SOAP-versievereisten hebben dan het eindpunt waarop berichten worden ontvangen. Ter ondersteuning van dit scenario kan de Routeringsservice protocollen overbruggingen, waaronder het verwerken van het SOAP-bericht naar de MessageVersion vereiste eindpunten van het doel. Op deze manier kan één protocol worden gebruikt voor interne communicatie, terwijl een ander protocol kan worden gebruikt voor externe communicatie.
Om de routering van berichten tussen eindpunten met verschillende transporten te ondersteunen, gebruikt de Routeringsservice door het systeem geleverde bindingen die de service in staat stellen om verschillende protocollen te overbruggen. Dit gebeurt automatisch wanneer het service-eindpunt dat wordt weergegeven door de routeringsservice een ander protocol gebruikt dan de clienteindpunten waarnaar berichten worden doorgestuurd.
SOAP-verwerking
Een veelvoorkomende routeringsvereiste is de mogelijkheid om berichten tussen eindpunten te routeren met verschillende SOAP-vereisten. Ter ondersteuning van deze vereiste biedt de routeringsservice een SoapProcessingBehavior service waarmee automatisch een nieuwe MessageVersion wordt gemaakt die voldoet aan de vereisten van het doeleindpunt voordat het bericht naar het wordt doorgestuurd. Dit gedrag maakt ook een nieuwe MessageVersion voor elk antwoordbericht voordat het wordt geretourneerd naar de aanvragende clienttoepassing, om ervoor te zorgen dat de MessageVersion van het antwoord overeenkomt met die van de oorspronkelijke aanvraag.
Zie Inleiding tot routering voor meer informatie over SOAP-verwerking.
Foutafhandeling
In een systeem dat bestaat uit gedistribueerde services die afhankelijk zijn van netwerkcommunicatie, is het belangrijk om ervoor te zorgen dat communicatie binnen uw systeem bestand is tegen tijdelijke netwerkfouten. De routeringsservice implementeert foutafhandeling waarmee u veel scenario's voor communicatiefouten kunt afhandelen die anders kunnen leiden tot een servicestoring.
Als de routeringsservice een CommunicationException tijdje een bericht probeert te verzenden, vindt foutafhandeling plaats. Deze uitzonderingen geven meestal aan dat er een probleem is opgetreden tijdens het communiceren met het gedefinieerde clienteindpunt, zoals een EndpointNotFoundException, ServerTooBusyExceptionof CommunicationObjectFaultedException. De code voor foutafhandeling zal ook proberen opnieuw te verzenden wanneer er een TimeoutException optreedt. Dit is een andere veelvoorkomende uitzondering die niet is afgeleid van CommunicationException.
Zie Inleiding tot routering voor meer informatie over foutafhandeling.
Back-upeindpunten
Naast de doelclienteindpunten die zijn gekoppeld aan elke filterdefinitie in de filtertabel, kunt u ook een lijst maken met back-upeindpunten waarnaar het bericht wordt doorgestuurd in het geval van een overdrachtsfout. Als er een fout optreedt en er een back-uplijst is gedefinieerd voor de filtervermelding, probeert de routeringsservice het bericht te verzenden naar het eerste eindpunt dat in de lijst is gedefinieerd. Als deze overdrachtspoging mislukt, probeert de service het volgende eindpunt en gaat u door met dit proces totdat de overdrachtspoging is geslaagd, een niet-overdrachtsgerelateerde fout retourneert of alle eindpunten in de back-uplijst een overdrachtsfout hebben geretourneerd.
Zie Inleiding en berichtfilters voor routering voor meer informatie over back-upeindpunten.
Streaming
De routeringsservice kan berichten streamen als u de binding instelt ter ondersteuning van streaming. Er zijn echter enkele voorwaarden waaronder berichten mogelijk moeten worden gebufferd:
Multicast (buffer voor het maken van extra berichtkopieën)
Failover (buffer voor het geval het bericht naar een back-up moet worden verzonden)
System.ServiceModel.Routing.RoutingConfiguration.RouteOnHeadersOnly is false (buffer voor het presenteren van de MessageFilterTable met een MessageBuffer, zodat filters de hoofdtekst kunnen inspecteren)
Dynamische configuratie