Routningstjänst
Routningstjänsten är en allmän SOAP-mellanhand som fungerar som en meddelanderouter. Huvudfunktionerna i routningstjänsten är möjligheten att dirigera meddelanden baserat på meddelandeinnehåll, vilket gör att ett meddelande kan vidarebefordras till en klientslutpunkt baserat på ett värde i själva meddelandet, antingen i rubriken eller meddelandetexten.
RoutingService implementeras som en WCF-tjänst (Windows Communication Foundation) i System.ServiceModel.Routing namnområdet. Routningstjänsten exponerar en eller flera tjänstslutpunkter som tar emot meddelanden och dirigerar sedan varje meddelande till en eller flera klientslutpunkter baserat på meddelandeinnehållet. Tjänsten innehåller följande funktioner:
Innehållsbaserad routning
Tjänstaggregering
Versionshantering av tjänster
Prioritetsdirigering
Dynamisk konfiguration
Protokollbryggning
SOAP-bearbetning
Avancerad felhantering
Slutpunkter för säkerhetskopiering
Även om det är möjligt att skapa en mellanhandstjänst som uppnår ett eller flera av dessa mål, är en sådan implementering ofta kopplad till ett specifikt scenario eller en lösning och kan inte tillämpas på nya program.
Routningstjänsten tillhandahåller en allmän, dynamiskt konfigurerbar, pluggbar SOAP-mellanhand som är kompatibel med WCF-tjänst- och kanalmodellerna och gör att du kan utföra innehållsbaserad routning av SOAP-baserade meddelanden.
Kommentar
Routningstjänsten stöder för närvarande inte routning av WCF REST-tjänster. Om du vill dirigera REST-anrop kan du överväga att använda System.Web.Routing eller dirigera programbegäran.
Innehållsbaserad routning
Innehållsbaserad routning är möjligheten att dirigera ett meddelande baserat på ett eller flera värden som finns i meddelandet. Routningstjänsten inspekterar varje meddelande och dirigerar det till målslutpunkten baserat på meddelandeinnehållet och routningslogik som du skapar. Innehållsbaserad routning utgör grunden för tjänstaggregering, tjänstversionshantering och prioritetsroutning.
För att implementera innehållsbaserad routning förlitar sig routningstjänsten på MessageFilter implementeringar som används för att matcha specifika värden i de meddelanden som ska dirigeras. Om ett MessageFilter matchar ett meddelande dirigeras meddelandet till målslutpunkten som är associerad med MessageFilter. Meddelandefilter grupperas i filtertabeller (FilterTableCollection) för att konstruera komplex routningslogik. En filtertabell kan till exempel innehålla fem ömsesidigt uteslutande meddelandefilter som gör att meddelanden endast dirigeras till en av de fem målslutpunkterna.
Med routningstjänsten kan du konfigurera logiken som används för att utföra innehållsbaserad routning, samt dynamiskt uppdatera routningslogik vid körning.
Genom gruppering av meddelandefilter i filtertabeller kan routningslogik skapas som gör att du kan hantera flera routningsscenarier som:
Tjänstaggregering
Versionshantering av tjänster
Prioritetsdirigering
Dynamisk konfiguration
Mer information om meddelandefilter och filtertabeller finns i Introduktions - och meddelandefilter för routning.
Tjänstsammanfattning
Genom att använda innehållsbaserad routning kan du exponera en slutpunkt som tar emot meddelanden från externa klientprogram och sedan dirigerar varje meddelande till lämplig intern slutpunkt baserat på ett värde i meddelandet. Det här är användbart för att erbjuda en specifik slutpunkt för en mängd olika serverdelsprogram och även för att presentera en programslutpunkt för kunder samtidigt som du räknar in ditt program i en mängd olika tjänster.
Versionshantering av tjänster
När du migrerar till en ny version av lösningen kan du behöva underhålla den gamla versionen parallellt för att betjäna befintliga kunder. Detta kräver ofta att klienter som ansluter till den nyare versionen måste använda en annan adress när de kommunicerar med lösningen. Med routningstjänsten kan du exponera en tjänstslutpunkt som hanterar båda versionerna av lösningen genom att dirigera meddelanden till lämplig lösning baserat på versionsspecifik information som finns i meddelandet. Ett exempel på en sådan implementering finns i How To: Service Versionsing (Så här gör du: Tjänstversioner).
Prioritetsroutning
När du tillhandahåller en tjänst för flera klienter kan du ha ett serviceavtal (SLA) med vissa partner som kräver att alla data från dessa partner bearbetas separat från andra klienters. Genom att använda ett filter som söker efter kundspecifik information i meddelandet kan du enkelt dirigera meddelanden från specifika partner till en slutpunkt som har skapats för att uppfylla deras SLA-krav.
Dynamisk konfiguration
För att stödja verksamhetskritiska system, där meddelanden måste bearbetas utan avbrott i tjänsten, är det viktigt att du kan ändra konfigurationen av komponenter i systemet vid körning. För att stödja detta behov tillhandahåller routningstjänsten en IExtension<T> implementering, RoutingExtension, som tillåter dynamisk uppdatering av routningstjänstens konfiguration vid körning.
Mer information om dynamisk konfiguration av routningstjänsten finns i Introduktion till routning.
Protokollbryggning
En av utmaningarna i mellanliggande scenarier är att de interna slutpunkterna kan ha andra krav på transport- eller SOAP-version än den slutpunkt som meddelanden tas emot på. För att stödja det här scenariot kan routningstjänsten överbrygga protokoll, inklusive bearbetning av SOAP-meddelandet till det MessageVersion som krävs av målslutpunkterna. På så sätt kan ett protokoll användas för intern kommunikation, medan ett annat kan användas för extern kommunikation.
För att stödja routning av meddelanden mellan slutpunkter med olika transporter använder routningstjänsten systembaserade bindningar som gör att tjänsten kan överbrygga olika protokoll. Detta inträffar automatiskt när tjänstslutpunkten som exponeras av routningstjänsten använder ett annat protokoll än de klientslutpunkter som meddelanden dirigeras till.
SOAP-bearbetning
Ett vanligt routningskrav är möjligheten att dirigera meddelanden mellan slutpunkter med olika SOAP-krav. För att stödja detta krav tillhandahåller routningstjänsten en SoapProcessingBehavior som automatiskt skapar en ny MessageVersion som uppfyller kraven för målslutpunkten innan meddelandet dirigeras till den. Det här beteendet skapar också en ny MessageVersion för alla svarsmeddelanden innan det returneras till det begärande klientprogrammet för att säkerställa att MessageVersion för svaret matchar den ursprungliga begäran.
Mer information om SOAP-bearbetning finns i Introduktion till routning.
Felhantering
I ett system som består av distribuerade tjänster som förlitar sig på nätverkskommunikation är det viktigt att säkerställa att kommunikationen i systemet är resistent mot tillfälliga nätverksfel. Routningstjänsten implementerar felhantering som gör att du kan hantera många kommunikationsfelsscenarier som annars kan leda till avbrott i tjänsten.
Om routningstjänsten stöter på ett CommunicationException försök att skicka ett meddelande sker felhantering. Dessa undantag indikerar vanligtvis att ett problem påträffades vid försök att kommunicera med den definierade klientslutpunkten, till exempel en EndpointNotFoundException, ServerTooBusyExceptioneller CommunicationObjectFaultedException. Felhanteringskoden fångar också upp och försöker skicka igen när en TimeoutException inträffar, vilket är ett annat vanligt undantag som inte härleds från CommunicationException.
Mer information om felhantering finns i Introduktion till routning.
Slutpunkter för säkerhetskopiering
Förutom målklientslutpunkterna som är associerade med varje filterdefinition i filtertabellen kan du också skapa en lista över slutpunkter för säkerhetskopiering som meddelandet dirigeras till i händelse av ett överföringsfel. Om ett fel inträffar och en säkerhetskopieringslista har definierats för filterposten försöker routningstjänsten skicka meddelandet till den första slutpunkten som definierats i listan. Om det här överföringsförsöket misslyckas provar tjänsten nästa slutpunkt och fortsätter den här processen tills överföringsförsöket lyckas, returnerar ett icke-överföringsrelaterat fel eller alla slutpunkter i säkerhetskopieringslistan har returnerat ett överföringsfel.
Mer information om slutpunkter för säkerhetskopiering finns i Introduktion till routning och meddelandefilter.
Strömning
Routningstjänsten kan strömma meddelanden om du ställer in bindningen som stöd för strömning. Det finns dock vissa villkor under vilka meddelanden kan behöva buffrats:
Multicast (buffert för att skapa ytterligare meddelandekopior)
Redundansväxling (buffert om meddelandet måste skickas till en säkerhetskopia)
System.ServiceModel.Routing.RoutingConfiguration.RouteOnHeadersOnly är falskt (buffert för att presentera MessageFilterTable med en MessageBuffer så att filter kan inspektera brödtexten)
Dynamisk konfiguration