Udostępnij za pośrednictwem


Usługa routingu

Usługa routingu jest ogólnym pośrednikiem protokołu SOAP, który działa jako router komunikatów. Podstawową funkcją usługi routingu jest możliwość kierowania komunikatów na podstawie zawartości komunikatów, która umożliwia przekazywanie komunikatu do punktu końcowego klienta na podstawie wartości w samym komunikacie w nagłówku lub treści komunikatu.

Element RoutingService jest implementowany jako usługa Windows Communication Foundation (WCF) w System.ServiceModel.Routing przestrzeni nazw. Usługa routingu uwidacznia co najmniej jeden punkt końcowy usługi, który odbiera komunikaty, a następnie kieruje każdy komunikat do co najmniej jednego punktu końcowego klienta na podstawie zawartości komunikatu. Usługa udostępnia następujące funkcje:

  • Routing oparty na zawartości

    • Agregacja usługi

    • Przechowywanie wersji usługi

    • Routing oparty na priorytetach

    • Konfiguracja dynamiczna

  • Mostkowanie protokołu

  • Przetwarzanie protokołu SOAP

  • Zaawansowana obsługa błędów

  • Punkty końcowe kopii zapasowych

Chociaż istnieje możliwość utworzenia usługi pośredniczącej, która realizuje co najmniej jeden z tych celów, często taka implementacja jest powiązana z określonym scenariuszem lub rozwiązaniem i nie może być łatwo stosowana do nowych aplikacji.

Usługa routingu zapewnia ogólny, dynamicznie konfigurowalny, podłączany pośrednik SOAP, który jest zgodny z modelami usług I kanałów WCF i umożliwia wykonywanie routingu opartego na zawartości komunikatów opartych na protokole SOAP.

Uwaga

Usługa routingu nie obsługuje obecnie routingu usług REST WCF. Aby kierować wywołania REST, rozważ użycie lub routing System.Web.Routingżądań aplikacji.

Routing oparty na zawartości

Routing oparty na zawartości to możliwość kierowania komunikatu na podstawie co najmniej jednej wartości zawartej w komunikacie. Usługa routingu sprawdza każdy komunikat i kieruje go do docelowego punktu końcowego na podstawie zawartości komunikatu i utworzonej logiki routingu. Routing oparty na zawartości stanowi podstawę agregacji usługi, obsługi wersji usług i routingu priorytetowego.

Aby zaimplementować routing oparty na zawartości, usługa routingu opiera się na MessageFilter implementacjach, które są używane do dopasowywania określonych wartości w komunikatach do kierowania. Jeśli element MessageFilter pasuje do komunikatu, komunikat jest kierowany do docelowego punktu końcowego skojarzonego z filtrem MessageFilter. Filtry komunikatów są grupowane razem w tabele filtrów (FilterTableCollection), aby utworzyć złożoną logikę routingu. Na przykład tabela filtrów może zawierać pięć wzajemnie wykluczających się filtrów komunikatów, które powodują kierowanie komunikatów tylko do jednego z pięciu docelowych punktów końcowych.

Usługa routingu umożliwia skonfigurowanie logiki używanej do wykonywania routingu opartego na zawartości, a także dynamicznej aktualizacji logiki routingu w czasie wykonywania.

Dzięki grupowaniu filtrów komunikatów w tabelach filtrów można utworzyć logikę routingu, która umożliwia obsługę wielu scenariuszy routingu, takich jak:

  • Agregacja usługi

  • Przechowywanie wersji usługi

  • Routing oparty na priorytetach

  • Konfiguracja dynamiczna

Aby uzyskać więcej informacji na temat filtrów komunikatów i tabel filtrów, zobacz Wprowadzenie do routingu i Filtry komunikatów.

Agregacja usługi

Korzystając z routingu opartego na zawartości, można uwidocznić jeden punkt końcowy, który odbiera komunikaty z zewnętrznych aplikacji klienckich, a następnie kieruje każdy komunikat do odpowiedniego wewnętrznego punktu końcowego na podstawie wartości w komunikacie. Jest to przydatne, aby zaoferować jeden konkretny punkt końcowy dla różnych aplikacji zaplecza, a także przedstawić klientom jeden punkt końcowy aplikacji podczas uwzględniania aplikacji w różnych usługach.

Przechowywanie wersji usługi

Podczas migracji do nowej wersji rozwiązania może być konieczne zachowanie starej wersji równolegle w celu obsługi istniejących klientów. Często wymaga to, aby klienci łączący się z nowszą wersją musieli używać innego adresu podczas komunikacji z rozwiązaniem. Usługa routingu umożliwia uwidocznienie jednego punktu końcowego usługi obsługującego obie wersje rozwiązania przez kierowanie komunikatów do odpowiedniego rozwiązania na podstawie informacji specyficznych dla wersji zawartych w komunikacie. Przykład takiej implementacji można znaleźć w temacie How To: Service Versioning (Instrukcje: przechowywanie wersji usługi).

Routing priorytetowy

W przypadku świadczenia usługi dla wielu klientów może istnieć umowa dotycząca poziomu usług (SLA) z niektórymi partnerami, która wymaga przetworzenia wszystkich danych od tych partnerów niezależnie od innych klientów. Korzystając z filtru, który wyszukuje informacje specyficzne dla klienta zawarte w komunikacie, można łatwo kierować komunikaty od określonych partnerów do punktu końcowego, który został utworzony w celu spełnienia wymagań umowy SLA.

Konfiguracja dynamiczna

Aby obsługiwać systemy o znaczeniu krytycznym, w których komunikaty muszą być przetwarzane bez żadnych przerw w działaniu usługi, ważne jest, aby móc modyfikować konfigurację składników w systemie w czasie wykonywania. Aby zapewnić obsługę tej potrzeby, usługa routingu udostępnia implementację IExtension<T> , RoutingExtensionktóra umożliwia dynamiczne aktualizowanie konfiguracji usługi routingu w czasie wykonywania.

Aby uzyskać więcej informacji na temat dynamicznej konfiguracji usługi routingu, zobacz Wprowadzenie do routingu.

Mostkowanie protokołu

Jednym z wyzwań w scenariuszach pośredniczących jest to, że wewnętrzne punkty końcowe mogą mieć inne wymagania dotyczące transportu lub wersji protokołu SOAP niż punkt końcowy odbierany przez komunikaty. Aby obsłużyć ten scenariusz, usługa routingu może połączyć protokoły, w tym przetwarzać komunikat PROTOKOŁU SOAP do MessageVersion wymaganych przez docelowe punkty końcowe. W ten sposób można użyć jednego protokołu do komunikacji wewnętrznej, a drugi może służyć do komunikacji zewnętrznej.

Aby obsługiwać routing komunikatów między punktami końcowymi z różnymi transportami, usługa routingu używa powiązań dostarczanych przez system, które umożliwiają usłudze łączenie różnych protokołów. Dzieje się tak automatycznie, gdy punkt końcowy usługi uwidoczniony przez usługę routingu używa innego protokołu niż punkty końcowe klienta, do których są kierowane komunikaty.

Przetwarzanie protokołu SOAP

Typowym wymaganiem dotyczącym routingu jest możliwość kierowania komunikatów między punktami końcowymi z różnymi wymaganiami protokołu SOAP. Aby obsłużyć to wymaganie, usługa routingu udostępnia SoapProcessingBehavior usługę, która automatycznie tworzy nową usługę MessageVersion , która spełnia wymagania docelowego punktu końcowego przed skierowaniem do niego komunikatu. To zachowanie powoduje również utworzenie nowego komunikatu MessageVersion dla dowolnego komunikatu odpowiedzi przed zwróceniem go do żądanej aplikacji klienckiej, aby upewnić się, że element MessageVersion odpowiedzi odpowiada oryginalnemu żądaniu.

Aby uzyskać więcej informacji na temat przetwarzania protokołu SOAP, zobacz Wprowadzenie do routingu.

Obsługa błędów

W systemie składającym się z usług rozproszonych, które opierają się na komunikacji sieciowej, należy upewnić się, że komunikacja w systemie jest odporna na przejściowe awarie sieci. Usługa routingu implementuje obsługę błędów, która umożliwia obsługę wielu scenariuszy awarii komunikacji, które w przeciwnym razie mogą spowodować awarię usługi.

Jeśli usługa routingu napotka błąd CommunicationException podczas próby wysłania komunikatu, nastąpi obsługa błędów. Te wyjątki zwykle wskazują, że wystąpił problem podczas próby komunikowania się ze zdefiniowanym EndpointNotFoundExceptionpunktem końcowym klienta, takim jak , ServerTooBusyExceptionlub CommunicationObjectFaultedException. Kod obsługi błędów również przechwyci i spróbuje ponowić próbę wysłania, gdy wystąpi wyjątek TimeoutException , co jest innym typowym wyjątkiem, który nie pochodzi z klasy CommunicationException.

Aby uzyskać więcej informacji na temat obsługi błędów, zobacz Wprowadzenie do routingu.

Punkty końcowe kopii zapasowej

Oprócz docelowych punktów końcowych klienta skojarzonych z każdą definicją filtru w tabeli filtrów można również utworzyć listę punktów końcowych kopii zapasowych, do których będzie kierowany komunikat w przypadku awarii transmisji. Jeśli wystąpi błąd i lista kopii zapasowych jest zdefiniowana dla wpisu filtru, usługa routingu podejmie próbę wysłania komunikatu do pierwszego punktu końcowego zdefiniowanego na liście. Jeśli ta próba transmisji nie powiedzie się, usługa spróbuje następnego punktu końcowego i będzie kontynuować ten proces, dopóki próba transmisji nie powiedzie się, zwróci błąd związany z brakiem transmisji lub wszystkie punkty końcowe na liście kopii zapasowych zwróciły błąd transmisji.

Aby uzyskać więcej informacji na temat punktów końcowych kopii zapasowych, zobacz Wprowadzenie do routingu i Filtry komunikatów.

Przesyłanie strumieniowe

Usługa routingu może pomyślnie przesyłać strumieniowo komunikaty, jeśli ustawisz powiązanie na obsługę przesyłania strumieniowego. Istnieją jednak pewne warunki, w których komunikaty mogą wymagać buforowania:

  • Multiemisji (bufor do tworzenia dodatkowych kopii komunikatów)

  • Tryb failover (bufor w przypadku konieczności wysłania komunikatu do kopii zapasowej)

  • Parametr System.ServiceModel.Routing.RoutingConfiguration.RouteOnHeadersOnly ma wartość false (bufor przedstawiający tabelę MessageFilterTable z kontrolką MessageBuffer, aby filtry mogły sprawdzić treść)

  • Konfiguracja dynamiczna

Zobacz też