ルーティング サービスは高度にカスタマイズできますが、新しい構成をゼロから作成するときに効率的なルーティング ロジックを設計することは困難な場合があります。 ただし、ほとんどのルーティング サービス構成に従う一般的なシナリオがいくつかあります。 これらのシナリオは特定の構成には直接適用されない場合があります。これらのシナリオを処理するようにルーティング サービスを構成する方法を理解することは、ルーティング サービスの理解に役立つでしょう。
一般的なシナリオ
ルーティング サービスの最も基本的な用途は、複数の宛先エンドポイントを集約してクライアント アプリケーションに公開されるエンドポイントの数を減らし、メッセージ フィルターを使用して各メッセージを正しい宛先にルーティングすることです。 メッセージは、論理処理または物理処理の要件 (特定のサービスで処理する必要があるメッセージの種類など) に基づいてルーティングすることも、特定のソースからのメッセージの優先順位処理を提供するなど、任意のビジネス ニーズに基づいてルーティングすることもできます。 次の表に、一般的なシナリオとその発生時期を示します。
シナリオ | 使用する状況 |
---|---|
サービスのバージョン管理 | サービスの複数のバージョンをサポートする必要がある場合、または今後更新されたサービスをデプロイする可能性がある |
サービス データのパーティション分割 | 複数のホスト間でサービスをパーティション分割する必要があります |
動的な更新 | サービスのデプロイの変更を処理するには、実行時にルーティング ロジックを動的に再構成する必要があります |
マルチキャスト | 1 つのメッセージを複数のエンドポイントに送信する必要があります |
プロトコル ブリッジング | 1 つのトランスポート プロトコル経由でメッセージを受信し、宛先エンドポイントが別のプロトコルを使用する |
エラー処理 | ネットワークの停止と通信エラーに対する回復性を提供する必要がある |
注
表示されるシナリオの多くは、特定のビジネス ニーズや処理要件に固有のものですが、動的な更新をサポートし、エラー処理を利用する計画は、実行時にルーティング ロジックを変更したり、一時的なネットワークや通信の障害から復旧したりできるため、多くの場合、ベスト プラクティスと見なすことができます。
サービスのバージョン管理
新しいバージョンのサービスを導入する場合、多くの場合、すべてのクライアントが新しいサービスに移行するまで、以前のバージョンを維持する必要があります。 これは、サービスが実行時間の長いプロセスであり、完了までに数日、数週間、または数か月かかる場合に特に重要です。 通常、以前のバージョンの元のエンドポイントを維持しながら、新しいサービスの新しいエンドポイント アドレスを実装する必要があります。
ルーティング サービスを使用すると、1 つのエンドポイントを公開してクライアント アプリケーションからメッセージを受信し、メッセージの内容に基づいて各メッセージを正しいサービス バージョンにルーティングできます。 最も基本的な実装では、メッセージが処理されるサービスのバージョンを示すカスタム ヘッダーをメッセージに追加する必要があります。 ルーティング サービスでは、XPathMessageFilter を使用して、各メッセージにカスタム ヘッダーが存在することを調べ、メッセージを適切な宛先エンドポイントにルーティングできます。
サービスのバージョン管理構成の作成に使用する手順については、「 方法: サービスのバージョン管理」を参照してください。
サービス データのパーティション分割
分散環境を設計する場合、高可用性を提供したり、個々のコンピューターの処理負荷を減らしたり、メッセージの特定のサブセットに専用リソースを提供したりするために、処理負荷を複数のコンピューターに分散することが望ましいことがよくあります。 ルーティング サービスは専用の負荷分散ソリューションを置き換えませんが、コンテンツ ベースのルーティングを実行する機能を使用して、同様のメッセージを特定の宛先にルーティングできます。 たとえば、特定のクライアントからのメッセージを、他のクライアントから受信したメッセージとは別に処理する必要がある場合があります。
サービス データパーティション構成の作成に使用する手順については、「 方法: サービス データのパーティション分割」を参照してください。
動的ルーティング
多くの場合、新しいバージョンのサービスへのルートの追加、ルーティング条件の変更、フィルターがルーティングする特定のメッセージの宛先エンドポイントの変更など、ビジネス ニーズの変化を満たすようにルーティング構成を変更することが望ましい場合があります。 ルーティング サービスを使用すると、 RoutingExtensionを使用してこれを行うことができます。これにより、実行時に新しい RoutingConfiguration を提供できます。 新しい構成はすぐに有効になりますが、ルーティング サービスによって処理される新しいセッションにのみ影響します。
動的ルーティングの実装に使用する手順については、「 方法: 動的更新」を参照してください。
マルチキャスト
メッセージをルーティングするときは、通常、各メッセージを 1 つの特定の宛先エンドポイントにルーティングします。 ただし、メッセージのコピーを複数の宛先エンドポイントにルーティングすることが必要になる場合があります。 マルチキャスト ルーティングを実行するには、次の条件が満たされている必要があります。
要求/応答では、要求に応答してクライアント アプリケーションが 1 つの応答のみを受信できる必要があるため、チャネル図形は要求/応答 (一方向または二重の場合もあります) にすることはできません。
メッセージを評価するときに、複数のフィルターが true を返す必要があります。
これらの条件が満たされている場合、true を返すフィルターに関連付けられている各宛先エンドポイントは、メッセージのコピーを受け取ります。
プロトコル ブリッジング
異なる SOAP プロトコル間でメッセージをルーティングする場合、ルーティング サービスは WCF API を使用して、メッセージをプロトコル間で変換します。 これは、ルーティング サービスによって公開されるサービス エンドポイントが、メッセージのルーティング対象のクライアント エンドポイントとは異なるプロトコルを使用する場合に自動的に発生します。 使用中のプロトコルが標準でない場合は、この動作を無効にすることができます。ただし、独自のブリッジ ング コードを指定する必要があります。
エラー処理
分散環境では、一時的なネットワーク障害や通信障害が発生することも珍しくありません。 ルーティング サービスなどの仲介サービスがないと、このような障害に対処する負担はクライアント アプリケーションにかかっています。 クライアント アプリケーションに、ネットワークまたは通信の障害や別の場所の知識が発生した場合に再試行する特定のロジックが含まれていない場合、宛先サービスによって正常に処理される前に、メッセージを複数回送信する必要があるシナリオが発生する可能性があります。 これは、信頼性が低いと認識される可能性があるため、アプリケーションに対する顧客の不満につながる可能性があります。
ルーティング サービスは、ネットワークまたは通信に関連するエラーが発生したメッセージに対して堅牢なエラー処理機能を提供することで、このシナリオを解決しようとします。 可能な宛先エンドポイントの一覧を作成し、このリストを各メッセージ フィルターに関連付けることで、発生する可能性のある宛先が 1 つだけで発生した単一障害点を削除します。 エラーが発生した場合、ルーティング サービスは、メッセージが配信されるか、通信以外のエラーが発生するか、すべてのエンドポイントが使い果たされるまで、メッセージを一覧の次のエンドポイントに配信しようとします。
エラー処理の構成に使用する手順については、「 方法: エラー処理」を参照してください。