レッスン 2 : 発信側データベースの作成

このレッスンでは、このチュートリアルで使用する発信側データベースとすべての発信側 Service Broker オブジェクトの作成方法を学習します。これらの手順は、データベース エンジンの発信側インスタンスと同じコンピュータで実行されている Management Studio のコピーから実行してください。

手順

Service Broker エンドポイントの作成

  • 次のコードをコピーし、クエリ エディタ ウィンドウに貼り付けます。次にこのコードを実行し、データベース エンジンのこのインスタンスの Service Broker エンドポイントを作成します。Service Broker エンドポイントは、Service Broker メッセージが送信されるネットワーク アドレスを指定します。このエンドポイントは、Service Broker の既定の TCP ポート 4022 を使用し、データベース エンジンのリモート インスタンスが Windows 認証接続を使用してメッセージを送信することを指定します。

    Windows 認証は、両方のコンピュータが同じドメインまたは信頼関係のあるドメインに含まれる場合に機能します。コンピュータが信頼関係のあるドメインに含まれていない場合は、エンドポイントに対して証明書セキュリティを使用します。詳細については、「Service Broker トランスポート セキュリティの証明書を作成する方法 (Transact-SQL)」を参照してください。

    USE master;
    GO
    IF EXISTS (SELECT * FROM sys.endpoints
               WHERE name = N'InstInitiatorEndpoint')
         DROP ENDPOINT InstInitiatorEndpoint;
    GO
    CREATE ENDPOINT InstInitiatorEndpoint
    STATE = STARTED
    AS TCP ( LISTENER_PORT = 4022 )
    FOR SERVICE_BROKER (AUTHENTICATION = WINDOWS );
    GO
    

発信側データベース、マスタ キー、およびユーザーの作成

  • 次のコードをコピーし、クエリ エディタ ウィンドウに貼り付けます。CREATE MASTER KEY ステートメントのパスワードを変更します。次にコードを実行し、このチュートリアルで使用する発信先データベースを作成します。既定では、新しいデータベースで ENABLE_BROKER オプションが ON に設定されます。このコードは、暗号化およびリモート接続をサポートするために使用されるマスタ キーとユーザーも作成します。

    USE master;
    GO
    IF EXISTS (SELECT * FROM sys.databases
               WHERE name = N'InstInitiatorDB')
         DROP DATABASE InstInitiatorDB;
    GO
    CREATE DATABASE InstInitiatorDB;
    GO
    USE InstInitiatorDB;
    GO
    
    CREATE MASTER KEY
           ENCRYPTION BY PASSWORD = N'<EnterStrongPassword2Here>';
    GO
    CREATE USER InitiatorUser WITHOUT LOGIN;
    GO
    

発信側証明書の作成

  • 次のコードをコピーし、クエリ エディタ ウィンドウに貼り付けます。BACKUP CERTIFICATE ステートメントで指定されるファイル名を、システム上のフォルダを参照するように変更します。次にコードを実行し、メッセージの暗号化に使用される発信側証明書を作成します。指定したフォルダには、自分の Windows アカウント、およびデータベース エンジンのインスタンスが実行されている Windows アカウント以外のアカウントからのアクセスを防ぐアクセス許可が設定されている必要があります。レッスン 3 では、発信先インスタンスからアクセス可能なフォルダに InstInitiatorCertificate.cer ファイルを手動でコピーする必要があります。

    CREATE CERTIFICATE InstInitiatorCertificate
         AUTHORIZATION InitiatorUser
         WITH SUBJECT = N'Initiator Certificate',
              EXPIRY_DATE = N'12/31/2010';
    
    BACKUP CERTIFICATE InstInitiatorCertificate
      TO FILE = 
    N'C:\storedcerts\$ampleSSBCerts\InstInitiatorCertificate.cer';
    GO
    

メッセージ型の作成

  • 次のコードをコピーし、クエリ エディタ ウィンドウに貼り付けます。次にこのコードを実行し、メッセージ交換のメッセージ型を作成します。ここで指定するメッセージ型の名前とプロパティは、前のレッスンで、InstTargetDB で作成した名前およびプロパティと同一である必要があります。

    CREATE MESSAGE TYPE [//BothDB/2InstSample/RequestMessage]
           VALIDATION = WELL_FORMED_XML;
    CREATE MESSAGE TYPE [//BothDB/2InstSample/ReplyMessage]
           VALIDATION = WELL_FORMED_XML;
    GO
    

コントラクトの作成

  • 次のコードをコピーし、クエリ エディタ ウィンドウに貼り付けます。次にこのコードを実行し、メッセージ交換のコントラクトを作成します。ここで指定するコントラクトの名前とプロパティは、次のレッスンで、InstInitiatorDB で作成するコントラクトと同一である必要があります。

    CREATE CONTRACT [//BothDB/2InstSample/SimpleContract]
          ([//BothDB/2InstSample/RequestMessage]
             SENT BY INITIATOR,
           [//BothDB/2InstSample/ReplyMessage]
             SENT BY TARGET
          );
    GO
    

発信側のキューおよびサービスの作成

  • 次のコードをコピーし、クエリ エディタ ウィンドウに貼り付けます。次にこのコードを実行し、発信先で使用するキューおよびサービスを作成します。CREATE SERVICE ステートメントは、サービスを InstInitiatorQueue に関連付けます。したがって、サービスに送信されたすべてのメッセージは、InstInitiatorQueue で受信されます。また CREATE SERVICE は、既に作成した //BothDB/ 2InstSample/SimpleContract を使用するメッセージ交換のみが、このサービスを発信先サービスとして使用できることを指定します。

    CREATE QUEUE InstInitiatorQueue;
    
    CREATE SERVICE [//InstDB/2InstSample/InitiatorService]
           AUTHORIZATION InitiatorUser
           ON QUEUE InstInitiatorQueue;
    GO
    

発信先オブジェクトへの参照の作成

  • 次のコードをコピーし、クエリ エディタ ウィンドウに貼り付けます。FROM FILE 句を変更し、レッスン 1 の手順 3. で InstTargetCertficate.cer ファイルをコピーしたフォルダを参照します。次にコードを実行し、発信先ユーザーを作成して発信先証明書を取り込みます。

    CREATE USER TargetUser WITHOUT LOGIN;
    
    CREATE CERTIFICATE InstTargetCertificate 
       AUTHORIZATION TargetUser
       FROM FILE = 
    N'C:\storedcerts\$ampleSSBCerts\InstTargetCertificate.cer'
    GO
    

ルートの作成

  • 次のコードをコピーし、クエリ エディタ ウィンドウに貼り付けます。文字列 MyTargetComputer を、発信先インスタンスを実行しているコンピュータの名前に変更します。次にコードを実行し、発信先サービスおよび発信側サービスへのルートと、TargetUser を発信先サービス ルートに関連付けるリモート サービス バインドを作成します。

    以下の CREATE ROUTE ステートメントは、発信先インスタンスに重複するサービス名が存在しないと仮定しています。発信先インスタンスの複数のデータベースに同じ名前のサービスが含まれている場合は、BROKER_INSTANCE 句を使用して、メッセージ交換を行うデータベースを指定します。

    DECLARE @Cmd NVARCHAR(4000);
    
    SET @Cmd = N'USE InstInitiatorDB;
    CREATE ROUTE InstTargetRoute
    WITH SERVICE_NAME =
           N''//TgtDB/2InstSample/TargetService'',
         ADDRESS = N''TCP://MyTargetComputer:4022'';';
    
    EXEC (@Cmd);
    
    SET @Cmd = N'USE msdb
    CREATE ROUTE InstInitiatorRoute
    WITH SERVICE_NAME =
           N''//InstDB/2InstSample/InitiatorService'',
         ADDRESS = N''LOCAL''';
    
    EXEC (@Cmd);
    GO
    CREATE REMOTE SERVICE BINDING TargetBinding
          TO SERVICE
             N'//TgtDB/2InstSample/TargetService'
          WITH USER = TargetUser;
    
    GO
    

次の手順

ここでは、チュートリアルで使用する発信側データベースを作成しました。次に、発信側オブジェクトに依存する発信先オブジェクトを作成し、発信先データベースの構成を終了します。「レッスン 3 : 発信先メッセージ交換オブジェクトの完了」を参照してください。