ルーティング サービスは、メッセージ ルーターとして機能する汎用 SOAP 中継局です。 ルーティング サービスのコア機能は、メッセージの内容に基づいてメッセージをルーティングする機能です。これにより、メッセージ自体の値に基づいて、ヘッダーまたはメッセージ本文でメッセージをクライアント エンドポイントに転送できます。
RoutingServiceは、System.ServiceModel.Routing名前空間の Windows Communication Foundation (WCF) サービスとして実装されます。 ルーティング サービスは、メッセージを受信する 1 つ以上のサービス エンドポイントを公開し、メッセージの内容に基づいて各メッセージを 1 つ以上のクライアント エンドポイントにルーティングします。 このサービスには、次の機能があります。
コンテンツ ベースのルーティング
サービスの集計
サービスのバージョン管理
優先順位ルーティング
動的構成
プロトコル ブリッジング
SOAP 処理
高度なエラー処理
バックアップ エンドポイント
これらの目標の 1 つ以上を達成する中間サービスを作成することはできますが、多くの場合、このような実装は特定のシナリオまたはソリューションに関連付けられており、新しいアプリケーションに簡単に適用することはできません。
ルーティング サービスは、WCF サービスおよびチャネル モデルと互換性があり、SOAP ベースのメッセージのコンテンツ ベースのルーティングを実行できる、動的に構成可能な汎用のプラグ可能な SOAP 中継局を提供します。
注
ルーティング サービスは現在、WCF REST サービスのルーティングをサポートしていません。 REST 呼び出しをルーティングするには、 System.Web.Routing または アプリケーション要求ルーティングの使用を検討してください。
コンテンツ ベースのルーティング
コンテンツ ベースのルーティングは、メッセージに含まれる 1 つ以上の値に基づいてメッセージをルーティングする機能です。 ルーティング サービスは、各メッセージを検査し、作成したメッセージの内容とルーティング ロジックに基づいて送信先エンドポイントにルーティングします。 コンテンツ ベースのルーティングは、サービスの集計、サービスのバージョン管理、および優先順位ルーティングの基礎を提供します。
コンテンツ ベースのルーティングを実装するために、ルーティング サービスは、ルーティングされるメッセージ内の特定の値の照合に使用される MessageFilter 実装に依存します。 MessageFilter がメッセージと一致する場合、メッセージは MessageFilter に関連付けられている宛先エンドポイントにルーティングされます。 メッセージ フィルターは、複雑なルーティング ロジックを構築するために、フィルター テーブル (FilterTableCollection) にグループ化されます。 たとえば、フィルター テーブルには、メッセージが 5 つの宛先エンドポイントのいずれかにルーティングされる 5 つの相互排他的メッセージ フィルターが含まれている場合があります。
ルーティング サービスを使用すると、コンテンツ ベースのルーティングを実行するために使用されるロジックを構成できるほか、実行時にルーティング ロジックを動的に更新できます。
メッセージ フィルターをフィルター テーブルにグループ化することで、次のような複数のルーティング シナリオを処理できるルーティング ロジックを構築できます。
サービスの集計
サービスのバージョン管理
優先順位ルーティング
動的構成
メッセージ フィルターとフィルター テーブルの詳細については、「 ルーティングの概要 と メッセージ フィルター」を参照してください。
サービスの集計
コンテンツ ベースのルーティングを使用すると、外部クライアント アプリケーションからメッセージを受信し、メッセージ内の値に基づいて各メッセージを適切な内部エンドポイントにルーティングする 1 つのエンドポイントを公開できます。 これは、さまざまなバックエンド アプリケーションに 1 つの特定のエンドポイントを提供し、アプリケーションをさまざまなサービスに組み込みながら、1 つのアプリケーション エンドポイントを顧客に提示するのに役立ちます。
サービスのバージョン管理
ソリューションの新しいバージョンに移行する場合は、既存の顧客にサービスを提供するために、古いバージョンを並行して維持する必要がある場合があります。 多くの場合、新しいバージョンに接続するクライアントは、ソリューションと通信するときに別のアドレスを使用する必要があります。 ルーティング サービスを使用すると、メッセージに含まれるバージョン固有の情報に基づいて適切なソリューションにメッセージをルーティングすることで、両方のバージョンのソリューションにサービスを提供する 1 つのサービス エンドポイントを公開できます。 このような実装の例については、「 方法: サービスのバージョン管理」を参照してください。
優先順位ルーティング
複数のクライアントにサービスを提供する場合、一部のパートナーとサービス レベル アグリーメント (SLA) があり、これらのパートナーのすべてのデータを他のクライアントとは別に処理する必要があります。 メッセージに含まれる顧客固有の情報を検索するフィルターを使用すると、SLA 要件を満たすために作成されたエンドポイントに特定のパートナーからのメッセージを簡単にルーティングできます。
動的構成
サービスを中断せずにメッセージを処理する必要があるミッション クリティカルなシステムをサポートするには、実行時にシステム内のコンポーネントの構成を変更できることが重要です。 このニーズをサポートするために、ルーティング サービスは IExtension<T> 実装 ( RoutingExtension) を提供します。これにより、実行時にルーティング サービス構成を動的に更新できます。
ルーティング サービスの動的構成の詳細については、「 ルーティングの概要」を参照してください。
プロトコル ブリッジング
中間シナリオの課題の 1 つは、内部エンドポイントのトランスポートまたは SOAP のバージョン要件が、メッセージを受信するエンドポイントとは異なる場合があるということです。 このシナリオをサポートするために、ルーティング サービスは、宛先エンドポイントで必要な MessageVersion への SOAP メッセージの処理を含むプロトコルをブリッジできます。 この方法では、1 つのプロトコルを内部通信に使用し、もう 1 つのプロトコルを外部通信に使用できます。
異なるトランスポートを使用するエンドポイント間のメッセージのルーティングをサポートするために、ルーティング サービスでは、異なるプロトコルをブリッジするサービスを有効にするシステム提供のバインディングが使用されます。 これは、ルーティング サービスによって公開されるサービス エンドポイントが、メッセージがルーティングされるクライアント エンドポイントとは異なるプロトコルを使用する場合に自動的に発生します。
SOAP 処理
一般的なルーティング要件は、異なる SOAP 要件を持つエンドポイント間でメッセージをルーティングする機能です。 この要件をサポートするために、ルーティング サービスは、メッセージがルーティングされる前に宛先エンドポイントの要件を満たす新しい MessageVersion を自動的に作成するSoapProcessingBehaviorを提供します。 この動作により、要求元のクライアント アプリケーションに応答メッセージを返す前に、応答の MessageVersion が元の要求の MessageVersion と一致するように、新しい MessageVersion も作成されます。
SOAP 処理の詳細については、「ルーティングの 概要」を参照してください。
エラー処理
ネットワーク通信に依存する分散サービスで構成されるシステムでは、システム内の通信が一時的なネットワーク障害に対する耐性を確保することが重要です。 ルーティング サービスにはエラー処理が実装されています。これにより、サービスが停止する可能性のある多くの通信エラー シナリオを処理できます。
ルーティング サービスがメッセージの送信中に CommunicationException を検出した場合、エラー処理が行われます。 これらの例外は、通常、定義されたクライアント エンドポイント ( EndpointNotFoundException、 ServerTooBusyException、 CommunicationObjectFaultedExceptionなど) との通信を試みている間に問題が発生したことを示します。 また、エラー処理コードは 、TimeoutException が発生したときに送信をキャッチして再試行しようとします。これは、 CommunicationException から派生しないもう 1 つの一般的な例外です。
エラー処理の詳細については、「ルーティングの 概要」を参照してください。
バックアップ エンドポイント
フィルター テーブル内の各フィルター定義に関連付けられている宛先クライアント エンドポイントに加えて、送信エラーが発生した場合にメッセージがルーティングされるバックアップ エンドポイントの一覧を作成することもできます。 エラーが発生し、フィルター エントリにバックアップ リストが定義されている場合、ルーティング サービスは、一覧で定義されている最初のエンドポイントにメッセージの送信を試みます。 この転送試行が失敗した場合、サービスは次のエンドポイントを試し、転送の試行が成功するか、転送に関連しないエラーが返されるか、バックアップ リスト内のすべてのエンドポイントから送信エラーが返されるまで、このプロセスを続行します。
バックアップ エンドポイントの詳細については、「 ルーティングの概要 と メッセージ フィルター」を参照してください。
ストリーミング
ストリーミングをサポートするようにバインドを設定すると、ルーティング サービスはメッセージを正常にストリーミングできます。 ただし、メッセージをバッファー処理する必要がある状況がいくつかあります。
マルチキャスト (追加のメッセージ コピーを作成するためのバッファー)
フェールオーバー (メッセージをバックアップに送信する必要がある場合のバッファー)
System.ServiceModel.Routing.RoutingConfiguration.RouteOnHeadersOnly が false (フィルターが本文を検査できるように MessageFilterTable に MessageBuffer を表示するバッファー)
動的構成