ルーティング コントラクト
ルーティング コントラクトは、ルーティング サービスが処理できるメッセージ パターンを定義します。 各コントラクトは型指定されておらず、サービスは、メッセージ スキーマやアクションを認識していない場合でもメッセージを受信できます。 このため、ルーティング サービスは、ルーティングされる基盤のメッセージの詳細構成を追加することなく、メッセージをジェネリックにルーティングできます。
ルーティング コントラクト
ルーティング サービスには汎用 WCF メッセージ オブジェクトを使用できるため、コントラクトを選ぶ場合の最大の検討事項は、クライアントとサービスとの通信時に使用されるチャネルの形状です。 ルーティング サービスは、メッセージを処理するときに対象型メッセージ ポンプを使用するため、通常、受信コントラクトの形状は、送信コントラクトの形状と一致します。 ただし、サービス モデルのディスパッチャーがこの形状を変更する場合があります。たとえば、ディスパッチャーは、二重チャネルを要求/応答チャネルに変換したり、セッションのサポートが不要で使用されていない場合に、このサポートを削除 (つまり、SessionMode.Allowed が設定されている場合に、IInputSessionChannel を IInputChannel に変更) したりします。
これらのメッセージ ポンプをサポートするために、ルーティング サービスでは、System.ServiceModel.Routing 名前空間にコントラクトを用意しています。これらのコントラクトは、ルーティング サービスが使用するサービス エンドポイントを定義するときに、使用される必要があります。 これらのコントラクトは型指定されていないため、どのようなメッセージの種類やアクションでも受信でき、ルーティング サービスは、特定のメッセージ スキーマを認識しない場合でもメッセージを処理できます。 ルーティング サービスが使用するコントラクトの詳細については、「ルーティング コントラクト」を参照してください。
ルーティング サービスによって提供されるコントラクトは、System.ServiceModel.Routing 名前空間に含まれています。これらのコントラクトは、次の表のとおりです。
コントラクト | 図形 | チャネル形状 |
---|---|---|
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 |