ルーティング コントラクトは、ルーティング サービスが処理できるメッセージ パターンを定義します。 各コントラクトは型指定されず、サービスはメッセージ スキーマやアクションを知らなくてもメッセージを受信できます。 これにより、ルーティング サービスは、ルーティングされる基になるメッセージの詳細に対する追加の構成なしで、メッセージを一般的にルーティングできます。
ルーティング契約
ルーティング サービスは汎用 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 |