Routingverträge
Routingverträge definieren die Nachrichtenmuster, die der Routingdienst verarbeiten kann. Jeder Vertrag ist typenlos und ermöglicht es dem Dienst, eine Nachricht ohne Kenntnis des Nachrichtenschemas oder der Nachrichtenaktion zu empfangen. Auf diese Weise kann der Routingdienst Nachrichten generisch weiterleiten, ohne dass eine zusätzliche Konfiguration für die Einzelheiten der zugrunde liegenden weitergeleiteten Nachrichten erforderlich ist.
Routingverträge
Da der Routingdienst ein generisches WCF-Nachrichtenobjekt akzeptiert, ist der wichtigste Aspekt bei der Auswahl eines Vertrags die Form des Kanals, der für die Kommunikation mit den Clients und Diensten verwendet wird. Beim Verarbeiten von Nachrichten verwendet der Routingdienst symmetrische Nachrichtensysteme. Die Form des eingehenden Vertrags muss im Allgemeinen also der Form des ausgehenden Vertrags entsprechen. Es gibt jedoch Fälle, in denen der Verteiler des Dienstmodells die Formen ändern kann, z. B. wenn der Verteiler einen Duplexkanal in einen Anforderung-Antwort-Kanal konvertiert oder die Sitzungsunterstützung aus einem Kanal entfernt, wenn diese nicht erforderlich ist und nicht verwendet wird (also wenn SessionMode.Allowed gilt und IInputSessionChannel in IInputChannel konvertiert wird).
Zur Unterstützung dieser Nachrichtensysteme stellt der Routingdienst Verträge im System.ServiceModel.Routing-Namespace bereit, die verwendet werden müssen, wenn vom Routingdienst genutzte Dienstendpunkte definiert werden. Diese Verträge sind typenlos, sodass jede Art von Nachrichtentyp oder -aktion empfangen werden kann. Außerdem kann der Routingdienst so Nachrichten ohne Kenntnis des jeweiligen Nachrichtenschemas behandeln. Weitere Informationen zu den vom Routingsdienst verwendeten Verträgen finden Sie unter Routingverträge.
Die vom Routingdienst bereitgestellten Verträge befinden sich im System.ServiceModel.Routing-Namespace und sind in der folgenden Tabelle beschrieben.
Vertrag | Form | Kanalform |
---|---|---|
SessionMode = SessionMode.Allowed AsyncPattern = true IsOneWay = true |
IInputChannel -> IOutputChannel |
|
SessionMode = SessionMode.Required AsyncPattern = true IsOneWay = true |
IInputSessionChannel -> IOutputSessionChannel |
|
SessionMode = SessionMode.Allowed AsyncPattern = true |
IReplyChannel -> IRequestChannel |
|
SessionMode=SessionMode.Required CallbackContract=typeof(ISimplexSession) AsyncPattern = true IsOneWay = true TransactionFlow(TransactionFlowOption.Allowed) |
IDuplexSessionChannel -> IDuplexSessionChannel |