Freigeben über


Routingverträge

Routingverträge definieren die Nachrichtenmuster, die der Routingdienst verarbeiten kann. Jeder Vertrag ist typlos und ermöglicht es dem Dienst, eine Nachricht ohne Kenntnis des Nachrichtenschemas oder der Aktion zu empfangen. Auf diese Weise kann der Routingdienst Nachrichten ohne zusätzliche Konfiguration für die Besonderheiten der zugrunde liegenden Nachrichten, die weitergeleitet werden, generisch weiterleiten.

Routingverträge

Da der Routingdienst ein generisches WCF-Nachrichtenobjekt akzeptiert, ist die wichtigste Überlegung beim Auswählen eines Vertrags die Form des Kanals, der bei der Kommunikation mit den Clients und Diensten verwendet wird. Bei der Verarbeitung von Nachrichten verwendet der Routingdienst symmetrische Nachrichtenpumpen, daher muss die Form des eingehenden Vertrags im Allgemeinen mit der Form des ausgehenden Vertrags übereinstimmen. Es gibt jedoch Fälle, in denen der Verteiler des Dienstmodells die Shapes ändern kann, z. B. wenn der Dispatcher einen Duplexkanal in einen Anforderungsantwortkanal konvertiert, oder die Sitzungsunterstützung aus einem Kanal entfernt wird, wenn er nicht erforderlich ist und nicht verwendet wird (d. h. wenn SessionMode.Allowed, konvertieren Sie einen IInputSessionChannel in einen IInputChannel).

Zur Unterstützung dieser Nachrichtenpumpen stellt der Routingdienst Verträge im System.ServiceModel.Routing Namespace bereit, die beim Definieren der vom Routingdienst verwendeten Dienstendpunkte verwendet werden müssen. Diese Verträge sind typlos, wodurch der Empfang eines beliebigen Nachrichtentyps oder jeder Aktion ermöglicht wird und der Routingdienst Nachrichten ohne Kenntnis des spezifischen Nachrichtenschemas verarbeiten kann. Weitere Informationen zu den Verträgen, die vom Routingdienst verwendet werden, finden Sie unter Routingverträge.

Die vom Routingdienst bereitgestellten Verträge befinden sich im System.ServiceModel.Routing Namespace und werden in der folgenden Tabelle beschrieben.

Vertrag Gestalt Kanalform
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

Siehe auch