次の方法で共有


Readme_ShoppingCart

更新 : 2005 年 12 月 5 日

Shopping Cart サンプルでは、簡単なショッピング カート アプリケーションの状態をメンテナンスするためにメッセージ交換グループ識別子を使用します。このアプリケーションでは ServiceBrokerInterface サンプルが使用されます。

既定では、Shopping Cart サンプル アプリケーションは C:\Program Files\Microsoft SQL Server\100\Samples\Engine\\ServiceBroker\ShoppingCart にインストールされます。サンプル フォルダが存在しない場合は、「サンプルのインストール」を参照してください。

サンプルは、演習目的で利用するためにのみ提供されています。サンプルを運用環境で使用することは想定されていないため、運用環境でのサンプルのテストは行われていません。Microsoft では、これらのサンプルに関する製品サポート サービスを提供していません。システム管理者の承認を得ることなく、サンプル アプリケーションやサンプル アセンブリを、運用中の SQL Server データベースやレポート サーバーに接続したり、これらのデータと共に使用することは避けてください。

サンプルのビルドとインストール

  1. Visual Studio 2005 で ShoppingCartCS.sln を開きます。

  2. F6 キーを押すか、[ビルド] メニューで [ソリューションのビルド] をクリックして、ソリューションをビルドします。

  3. コマンド プロンプトを開き、Scripts フォルダに移動して、次のコマンドを実行します。

    install all
    

    インストール スクリプトによって、アプリケーションの SQL Server オブジェクトがインストールされます。これには、ShoppingCartService サービスを実装する共通言語ランタイム (CLR) ストアド プロシージャが含まれます。

サンプルの実行

  1. サンプル ディレクトリから ShoppingCartClient.exe アプリケーションを実行します。簡単にするため、クライアントは、クライアントが実行されるたびに 1 つの注文を処理します。

  2. [Create Order] をクリックして注文を作成します。[Item] リストからアイテムを選択して [Add Item] をクリックし、ショッピング カートにアイテムを追加します。

  3. [Service Broker Trace] タブをクリックすると、送信済みおよび受信済みの Service Broker メッセージの概要が表示されます。

  4. ssb_ShoppingCart データベースの ShoppingList テーブルおよび StateTable テーブルは、アプリケーションの状態をメンテナンスします。CLR ストアド プロシージャによって、クライアントからのメッセージに基づいてテーブルが更新されます。Management Studio または sqlcmd を使用して、これらのテーブルを調べることができます。

サンプルのアンインストール

  1. コマンド プロンプトを開き、Scripts フォルダに移動して、次のコマンドを実行します。

    uninstall all
    
  2. アンインストール スクリプトによって、アプリケーションの SQL Server オブジェクトが削除されます。

必要条件

このサンプルには Visual Studio 2005 が必要です。このサンプルでは、以前のバージョンにはなかった CLR の機能が使用されているため、Visual Studio 2005 より前のバージョンではこのサンプルをビルドできません。

使用例

サービスをホストするデータベースの状態が最も頻繁に格納されるのは Service Broker アプリケーションです。メッセージを受信すると、アプリケーションはデータベースから状態を読み込み、メッセージを処理します。

Service Broker Interface サンプルの Service クラスによって、状態をメンテナンスする便利な方法が提供されます。このサンプルでは、Service クラスを使用して状態をメンテナンスする方法が示されます。

Service クラスを使用して状態のメンテナンスを行うには、次の表のとおり、1 つのストアド プロシージャを SQL Server に実装し、2 つのメソッドをアプリケーションに実装します。

アイテム シグネチャ 説明

ストアド プロシージャ

CREATE PROCEDURE name (@cgid uniqueidentifier)

アプリケーションの状態を返します。このプロシージャによって返される結果セットには、メッセージ交換グループ識別子が含まれている必要があります。

パブリック メソッド

public override bool LoadState(System.Data.Sql.SqlReader reader)

ストアド プロシージャによって提供された結果セットを読み取り、状態を復元します。Service Broker Interface は識別子を SaveState メソッドに提供しないため、このストアド プロシージャはクラス内にメッセージ交換グループ識別子を保存する必要があります。

パブリック メソッド

public override void SaveState()

状態をデータベースに保存します。

このトピックでは、状態を復元するための一般的な概要について説明します。完全な例については、ShoppingCartService.cs を参照してください。

ストアド プロシージャはメッセージ交換グループ識別子を受け取り、2 つの結果セットを返す必要があります。1 番目の結果セットは、メッセージ交換グループ識別子自体で構成されます。2 番目の結果セットには、アプリケーション固有の状態が含まれています。このストアド プロシージャには固定名はありません。代わりに、AppLoaderProcName プロパティを設定することにより、ストアド プロシージャの名前を指定します。Service Broker Interface は指定されたストアド プロシージャの呼び出しを行います。

LoadState メソッドによってアプリケーションの状態を復元します。正確には、アプリケーションが行う処理は、アプリケーションが必要とする状態によって異なります。メソッドには、パラメータとして System.Data.Sql.SqlReader のインスタンスを取得します。SqlReader には、ストアド プロシージャを返す結果セットが含まれています。通常は、LoadState メソッドを実装すると、Service クラスの State プロパティが更新され、プライベート フィールドにメッセージ交換グループ識別子が保存され、それからアプリケーション固有の状態が適切なデータ構造に保存されます。たとえば、ShoppingCartService によって、アイテム、量、および価格の情報が ShoppingCart クラスのプライベート インスタンスに格納されます。

LoadState を呼び出した後、Service Broker Infrastructure によってメッセージがディスパッチされます。属性ベースのメッセージ ディスパッチ フレームワークを使用する場合、メッセージ型の名前に加え、State プロパティに基づいてメッセージをディスパッチできることに注意してください。メッセージを処理するメソッドでは、LoadState で作成されたデータ構造の読み取りや更新を行うことができます。

メソッドを処理するメッセージが返されると、Service Broker Infrastructure によって SaveState メソッドが呼び出されます。SaveState メソッドは、Service クラスの Connection プロパティを使用して SqlCommand オブジェクトを作成し、そのオブジェクトを使用してデータベースに格納された状態を更新します。たとえば、ShoppingCartService は、保存されたショッピング カートの内容を削除し、ショッピング カートの現在の内容をデータベースに挿入します。

変更履歴

リリース 履歴

2005 年 12 月 5 日

変更した内容 :
  • キー ファイルの名前や場所など、キー ファイルを生成する手順を変更しました。