Freigeben über


Routingdienst

Der Routingdienst ist ein generischer SOAP-Vermittler, der als Nachrichtenrouter fungiert. Die Kernfunktionalität des Routingdiensts ist die Möglichkeit, Nachrichten basierend auf Nachrichteninhalten weiterzuleiten, sodass eine Nachricht basierend auf einem Wert innerhalb der Nachricht selbst in der Kopfzeile oder im Nachrichtentext an einen Clientendpunkt weitergeleitet werden kann.

Dies RoutingService wird als Windows Communication Foundation (WCF)-Dienst im System.ServiceModel.Routing Namespace implementiert. Der Routingdienst macht einen oder mehrere Dienstendpunkte verfügbar, die Nachrichten empfangen, und leitet dann jede Nachricht basierend auf dem Nachrichteninhalt an einen oder mehrere Clientendpunkte weiter. Der Dienst bietet die folgenden Features:

  • Inhaltsbasiertes Routing

    • Dienstaggregation
    • Dienstversionsverwaltung
    • Prioritätsbasiertes Routing
    • Dynamische Konfiguration
  • Protokollbrücken

  • SOAP-Verarbeitung

  • Erweiterte Fehlerbehandlung

  • Backup-Endpunkte

Es ist zwar möglich, einen zwischengeschalteten Dienst zu erstellen, der einen oder mehrere dieser Ziele erreicht, aber häufig ist eine solche Implementierung an ein bestimmtes Szenario oder eine Bestimmte Lösung gebunden und kann nicht einfach auf neue Anwendungen angewendet werden.

Der Routingdienst bietet einen generischen, dynamisch konfigurierbaren, austauschbaren SOAP-Vermittler, der mit den WCF-Dienst- und Kanalmodellen kompatibel ist, und ermöglicht es Ihnen, inhaltsbasiertes Routing von SOAP-basierten Nachrichten durchzuführen.

Hinweis

Der Routingdienst unterstützt derzeit das Routing von WCF-REST-Diensten nicht. Um REST-Anrufe weiterzuleiten, sollten Sie System.Web.Routing oder das Routing von Anwendungsanforderungen in Betracht ziehen.

Inhaltsbasiertes Routing

Inhaltsbasiertes Routing ist die Möglichkeit, eine Nachricht basierend auf einem oder mehreren Werten in der Nachricht weiterzuleiten. Der Routingdienst prüft jede Nachricht und leitet sie basierend auf den Nachrichteninhalten und der von Ihnen erstellten Routinglogik an den Zielendpunkt weiter. Inhaltsbasiertes Routing bietet die Basis für dienstaggregation, Dienstversionsverwaltung und Prioritätsrouting.

Um inhaltsbasiertes Routing zu implementieren, basiert der Routingdienst auf MessageFilter Implementierungen, die zum Abgleichen bestimmter Werte innerhalb der zu leitenden Nachrichten verwendet werden. Wenn ein MessageFilter einer Nachricht entspricht, wird die Nachricht an den Zielendpunkt weitergeleitet, der dem MessageFilter zugeordnet ist. Nachrichtenfilter werden in FiltertabellenFilterTableCollection () gruppiert, um komplexe Routinglogik zu erstellen. Eine Filtertabelle kann beispielsweise fünf sich gegenseitig ausschließende Nachrichtenfilter enthalten, die dazu führen, dass Nachrichten nur an einen der fünf Zielendpunkte weitergeleitet werden.

Mit dem Routingdienst können Sie die Logik konfigurieren, die zum Ausführen von inhaltsbasiertem Routing verwendet wird, und die Routinglogik zur Laufzeit dynamisch aktualisieren.

Durch die Gruppierung von Nachrichtenfiltern in Filtertabellen kann Routinglogik erstellt werden, um mehrere Routing-Szenarien zu bearbeiten, wie:

  • Dienstaggregation
  • Dienstversionsverwaltung
  • Prioritätsbasiertes Routing
  • Dynamische Konfiguration

Weitere Informationen zu Nachrichtenfiltern und Filtertabellen finden Sie unter Routingeinführung und Nachrichtenfilter.

Aggregierung von Diensten

Mithilfe des inhaltsbasierten Routings können Sie einen Endpunkt verfügbar machen, der Nachrichten von externen Clientanwendungen empfängt, und dann jede Nachricht basierend auf einem Wert innerhalb der Nachricht an den entsprechenden internen Endpunkt weiterleitet. Dies ist nützlich, um einen bestimmten Endpunkt für eine Vielzahl von Back-End-Anwendungen anzubieten und kunden gleichzeitig einen Anwendungsendpunkt zu präsentieren, während Sie Ihre Anwendung in eine Vielzahl von Diensten integrieren.

Dienstversionsverwaltung

Wenn Sie zu einer neuen Version Ihrer Lösung migrieren, müssen Sie möglicherweise die alte Version parallel verwalten, um vorhandene Kunden zu bedienen. Dies erfordert häufig, dass Clients, die eine Verbindung mit der neueren Version herstellen, bei der Kommunikation mit der Lösung eine andere Adresse verwenden müssen. Mit dem Routingdienst können Sie einen Dienstendpunkt verfügbar machen, der beide Versionen Ihrer Lösung bereitstellt, indem Nachrichten basierend auf versionsspezifischen Informationen in der Nachricht an die entsprechende Lösung weitergeleitet werden. Ein Beispiel für eine solche Implementierung finden Sie unter How To: Service Versioning.

Prioritätsrouting

Wenn Sie einen Dienst für mehrere Kunden bereitstellen, verfügen Sie möglicherweise über ein SLA (Service Level Agreement) mit einigen Partnern, bei denen alle Daten dieser Partner getrennt von denen anderer Kunden verarbeitet werden müssen. Mithilfe eines Filters, der nach kundenspezifischen Informationen sucht, die in der Nachricht enthalten sind, können Sie Nachrichten von bestimmten Partnern problemlos an einen Endpunkt weiterleiten, der erstellt wurde, um ihre SLA-Anforderungen zu erfüllen.

Dynamische Konfiguration

Um unternehmenskritische Systeme zu unterstützen, bei denen Nachrichten ohne Dienstunterbrechungen verarbeitet werden müssen, ist es wichtig, dass Sie die Konfiguration von Komponenten innerhalb des Systems zur Laufzeit ändern können. Zur Unterstützung dieses Bedarfs bietet der Routingdienst eine IExtension<T> Implementierung, die RoutingExtensiondie dynamische Aktualisierung der Routingdienst-Konfiguration zur Laufzeit ermöglicht.

Weitere Informationen zur dynamischen Konfiguration des Routingdiensts finden Sie in der Routingeinführung.

Protokollüberbrückung

Eine der Herausforderungen in zwischengeschalteten Szenarien besteht darin, dass die internen Endpunkte möglicherweise unterschiedliche Transport- oder SOAP-Versionsanforderungen aufweisen als der Endpunkt, an dem Nachrichten empfangen werden. Um dieses Szenario zu unterstützen, kann der Routingdienst Protokolle überbrücken, einschließlich der Verarbeitung der SOAP-Nachricht an die MessageVersion, die für die Zielendpunkte erforderlich ist. Auf diese Weise kann ein Protokoll für die interne Kommunikation verwendet werden, während ein anderes für die externe Kommunikation verwendet werden kann.

Um das Routing von Nachrichten zwischen Endpunkten mit unterschiedlichen Transporten zu unterstützen, verwendet der Routingdienst vom System bereitgestellte Bindungen, mit denen der Dienst unterschiedliche Protokolle überbrücken kann. Dies tritt automatisch auf, wenn der vom Routingdienst verfügbar gemachte Dienstendpunkt ein anderes Protokoll als die Clientendpunkte verwendet, an die Nachrichten weitergeleitet werden.

SOAP-Verarbeitung

Eine häufige Routinganforderung ist die Möglichkeit, Nachrichten zwischen Endpunkten mit unterschiedlichen SOAP-Anforderungen weiterzuleiten. Um diese Anforderung zu unterstützen, stellt der Routingdienst ein SoapProcessingBehavior , das automatisch eine neue MessageVersion erstellt, die die Anforderungen des Zielendpunkts erfüllt, bevor die Nachricht an sie weitergeleitet wird. Dieses Verhalten erstellt auch eine neue MessageVersion für jede Antwortnachricht, bevor sie an die anfordernde Clientanwendung zurückgegeben wird, um sicherzustellen, dass die MessageVersion der Antwort mit der der ursprünglichen Anforderung übereinstimmt.

Weitere Informationen zur SOAP-Verarbeitung finden Sie in der Routingeinführung.

Fehlerbehandlung

In einem System, das aus verteilten Diensten besteht, die auf Netzwerkkommunikation angewiesen sind, ist es wichtig, sicherzustellen, dass die Kommunikation innerhalb Ihres Systems widerstandsfähig gegen vorübergehende Netzwerkfehler ist. Der Routingdienst implementiert die Fehlerbehandlung, mit der Sie viele Kommunikationsfehlerszenarien behandeln können, die andernfalls zu einem Dienstausfall führen können.

Wenn der Routingdienst beim Versuch, eine Nachricht zu senden, auf ein CommunicationException stößt, wird die Fehlerbehandlung vorgenommen. Diese Ausnahmen deuten in der Regel darauf hin, dass beim Versuch, mit dem definierten Clientendpunkt zu kommunizieren, wie z. B. ein EndpointNotFoundException, ServerTooBusyExceptionoder CommunicationObjectFaultedExceptionein Problem aufgetreten ist. Der Fehlerbehandlungscode fängt außerdem ab und versucht, das Senden erneut zu versuchen, wenn eine TimeoutException auftritt. Dies ist eine weitere häufige Ausnahme, die nicht von CommunicationException abgeleitet ist.

Weitere Informationen zur Fehlerbehandlung finden Sie in der Routingeinführung.

Sicherungsendpunkte

Zusätzlich zu den Zielclientendpunkten, die jeder Filterdefinition in der Filtertabelle zugeordnet sind, können Sie auch eine Liste der Sicherungsendpunkte erstellen, an die die Nachricht im Falle eines Übertragungsausfalls weitergeleitet wird. Wenn ein Fehler auftritt und eine Sicherungsliste für den Filtereintrag definiert ist, versucht der Routingdienst, die Nachricht an den ersten in der Liste definierten Endpunkt zu senden. Wenn dieser Übertragungsversuch fehlschlägt, versucht der Dienst den nächsten Endpunkt und setzt diesen Vorgang fort, bis der Übertragungsversuch erfolgreich ist, einen nicht mit der Übertragung zusammenhängenden Fehler zurückgibt oder alle Endpunkte in der Sicherungsliste einen Übertragungsfehler zurückgegeben haben.

Weitere Informationen zu Sicherungsendpunkten finden Sie unter Routingeinführung und Nachrichtenfilter.

Streamen

Der Routingdienst kann Nachrichten erfolgreich streamen, wenn Sie die Bindung so festlegen, dass streaming unterstützt wird. Es gibt jedoch einige Bedingungen, unter denen Nachrichten möglicherweise gepuffert werden müssen:

  • Multicast (Puffer zum Erstellen zusätzlicher Nachrichtenkopien).
  • Failover (Puffer für den Fall, dass die Nachricht an eine Sicherung gesendet werden muss).
  • System.ServiceModel.Routing.RoutingConfiguration.RouteOnHeadersOnly ist false (Puffer zum Darstellen der MessageFilterTable mit einem MessageBuffer, sodass Filter den Textkörper überprüfen können).
  • Dynamische Konfiguration.

Siehe auch