Service Broker アプリケーションのアンインストール

Service Broker アプリケーションは、データベースが同じインスタンスで引き続きホストされるが、アプリケーションが実装するサービスを提供しない場合にのみアンインストールする必要があります。データベースを削除すると、そのデータベース内の Service Broker オブジェクトも削除されます。データベースをあるインスタンスから別のインスタンスに移動すると、そのデータベースでホストされているサービスも移動します。

発信側サービスのアンインストール

発信側サービスをアンインストールするには、最初に、アプリケーションによる送信メッセージの作成を停止します。アプリケーションによる新規メッセージの送信を防止する最善の方法は、アプリケーションの種類によって異なります。ストアド プロシージャを使用してメッセージ交換を開始するアプリケーションの場合は、そのストアド プロシージャの削除が必要になることがあります。外部プログラムの場合は、ユーザーがそのプログラムを使用できないようにする、またはプログラムをアンインストールする必要がある場合があります。

サービスによる新規メッセージの作成を停止した後は、サービスがキューに残っている各メッセージを確実に処理するようにします。キューの各メッセージを受信し、メッセージ交換をエラーで終了して、そのメッセージ交換の状態を削除する、簡単なプロシージャを作成できます。キュー内のすべてのメッセージを処理することで、対象アプリケーションは、シャットダウンしているサービスからの応答を待つのではなく、メッセージ交換を正常に終了することができます。

最後に、サービス定義を削除して、Service Broker がそのサービスに対するメッセージを受け付けないようにします。サービスのためのすべてのルートを削除します。サービスのコントラクト、メッセージ型、およびキューは、インスタンスの別のサービスがこれらのオブジェクトを使用していない場合に限り削除します。必要であれば、サービスのアクティブ化ストアド プロシージャを削除します。

対象サービスのアンインストール

対象サービスをアンインストールするには、最初に、サービスがキューに残っている各メッセージを処理するようにします。アプリケーションにメッセージを処理させたり、アプリケーション固有のエラーでメッセージ交換を終了する簡単なプロシージャを作成したり、単にサービスを削除してメッセージ交換を Service Broker エラーで終了させることができます。いずれの方法を選択しても、メッセージ交換を終了することで、発信側アプリケーションは、シャットダウンしているサービスからの応答を待つのではなく、正常に終了することができます。

発信側サービスをホストするデータベースで、アンインストールしているサービスのネットワーク アドレスを含む各ルートを削除します。このサービスにメッセージを転送するインスタンスの msdb データベースで、このサービスのルートを削除します。サービスをホストするインスタンスで、msdb にサービスのルートが含まれている場合は、そのルートを削除します。

最後に、サービス定義を削除して、Service Broker がそのサービスに対するメッセージを受け付けないようにします。サービスのコントラクト、メッセージ型、およびキューは、インスタンスの別のサービスがこれらのオブジェクトを使用していない場合に限り削除します。必要であれば、サービスのアクティブ化ストアド プロシージャを削除します。