レッスン 11 : Weather アプリケーションへのイベントの送信

この手順では、Transact-SQL スクリプトを使用してイベントを Weather アプリケーションへ送信し、通知データを表示します。

イベント データ

イベントとは、通知アプリケーションが通知を生成するために使用するデータです。通知生成クエリを記述すると、それに基づいてイベント データとサブスクリプション データが関連付けられ、通知が生成されます。このようなクエリは、レッスン 5 でも使用しました。

通知を生成するクエリは、処理するデータを持つ各ジェネレータ クォンタムの間に起動されます。1 つ以上のバッチが着信するクォンタムでは、イベント ルールが実行されます。今後処理される定期的なサブスクリプション ルールを持つクォンタムでは、定期的なルールが実行されます。

イベント データがない場合は、ルールが実行されません。したがって、通知も生成されません。

WeatherData イベント

このアプリケーションでは、イベント送信ストアド プロシージャを使用して、イベントのバッチを送信します。まず、NSEventBeginBatchWeatherData ストアド プロシージャを使用して、イベント バッチを開きます。ホストされていないイベント プロバイダである WeatherSPEventProvider をイベント プロバイダとして指定します。このイベント プロバイダは、レッスン 6 で定義したものです。

ms170427.Caution(ja-jp,SQL.90).gif注意 :
これらのステートメントは、個別に実行しないでください。ステートメントは、1 つのイベント バッチを開いて閉じる動作を行うため、同じトランザクションで実行しなければなりません。これらのクエリを実行するには、AddWeatherEvents.sql スクリプトを実行します。AddWeatherEvents.sql スクリプトの実行については、このレッスンで後述します。
-- Use the weather application's database.
USE TutorialWeather;
-- Start an event batch.
DECLARE @BatchID bigint;
EXEC dbo.NSEventBeginBatchWeatherData N'WeatherSPEventProvider', @BatchID OUTPUT;

イベント バッチを作成したら、NSEventWriteWeatherData ストアド プロシージャを使用し、3 つの気象イベントを追加します。イベント バッチ ID を付加した後、各イベント フィールドに値を指定します。以下は、イベントの一例です。

-- Submit events.
EXEC dbo.NSEventWriteWeatherData
    @EventBatchId=@BatchID,
    @City=N'Seattle',
    @Date=CONVERT(DATETIME, '2005-04-20 13:00:00', 120),
    @Low = 31,
    @High = 52,
    @Forecast=N'Sunny'

このストアド プロシージャを使用して 3 つのイベントを送信したら、NSEventFlushBatchWeatherData を使用し、イベント バッチを閉じて、アプリケーション データベースにイベント バッチを送信します。

-- Flush event batch.
EXEC dbo.NSEventFlushBatchWeatherData @BatchID;

ビューとストアド プロシージャを使用してイベント バッチに関する情報を表示できるように、イベント バッチ ID を表示できます。

-- Display event batch ID
SELECT @BatchID 'Event Batch';

Weather アプリケーションへのイベントの送信

AddWeatherEvents.sql クエリを使用して、Weather アプリケーションにイベントを追加します。

Weather アプリケーションにイベントを送信するには

  1. ソリューション エクスプローラで [Weather] を展開し、[クエリ] を展開します。次に、AddWeatherEvents.sql を開きます。

  2. Transact-SQL コードを確認します。

  3. F5 キーを押してクエリを実行します。

    2 つの結果セットが返されます。1 つ目の結果セットでは、EventCount の値として 3 が返されます。2 つ目の結果セットでは、イベント バッチ ID の値として 1 が返されます。

イベント データの表示

ViewWeatherEvents.sql クエリを使用して、先ほど追加したイベントを表示します。

イベント データを表示するには

  1. ソリューション エクスプローラで、ViewWeatherEvents.sql を開きます。

  2. Transact-SQL コードを確認します。

  3. F5 キーを押してクエリを実行します。

複数のイベント バッチを送信する場合は、EventBatchId パラメータを適切に変更します。

通知の表示

クエリを実行してから約 30 秒後には、FileNotifications.htm ファイルが Notifications フォルダに作成されます。このファイルを開いて、通知データを確認します。次のような 3 つの通知を受け取ります。

  • Notification Id: 1 Notification Class Name: WeatherNotifications Subscriber Id: stephanie Device Address: stephanie@adventure-works.com Protocol Fields: Body: Weather report for the city of Seattle [2/21/2005 2:01:00 PM]: Sunny
    Expected low temperature : 31 F.
    Expected high temperature: 52 F.
    For more information, visit our web site at http://www.msnbc.com/news/wea\_front.asp?ta=y\&tab=BW\&tp=\&czstr=Seattle
    Thank you for using SQL Server Notification Services.
  • Notification Id: 2 Notification Class Name: WeatherNotifications Subscriber Id: david Device Address: david@adventure-works.com Protocol Fields: Body: Weather report for the city of Orlando [2/22/2005 2:01:00 AM]: Partly Cloudy
    Expected low temperature : 59 F.
    Expected high temperature: 81 F.
    For more information, visit our web site at http://www.msnbc.com/news/wea\_front.asp?ta=y\&tab=BW\&tp=\&czstr=Orlando
    Thank you for using SQL Server Notification Services.
  • Notification Id: 3 Notification Class Name: WeatherNotifications Subscriber Id: richard Device Address: richard@adventure-works.com Protocol Fields: Body: Weather report for the city of Seattle [2/21/2005 2:01:00 PM]: Sunny
    Expected low temperature : 31 F.
    Expected high temperature: 52 F.
    For more information, visit our web site at http://www.msnbc.com/news/wea\_front.asp?ta=y\&tab=BW\&tp=\&czstr=Seattle
    Thank you for using SQL Server Notification Services.

既定の File 配信プロトコルを使用しているため、イベントから生成された 3 つの通知はすべて 1 ファイルに記述されます。イベントをさらに送信すると、このファイルに通知が追加されます。

また、それぞれの通知にはヘッダーがあります。ヘッダーには、サブスクライバ ID とデバイスのアドレスを含む、通知に関する情報が表示されます。通知の本文は "Body:" から始まります。

トラブルシューティング

クエリを実行してから 1 分たっても Notifications フォルダに FileNotifications.htm ファイルが表示されない場合は、Windows イベント ビューアのアプリケーション ログで Notification Services からのイベントを確認します。Windows サービスが、Notifications フォルダへの書き込み権限を持っていない可能性があります。

ViewNotifications.sql クエリを実行すると、WeatherNotifications 通知クラスに生成されるすべての通知に関する情報を表示できます。

通知情報を表示するには

  1. ソリューション エクスプローラで [Weather] を展開し、[クエリ] を展開します。次に、ViewNotifications.sql をダブルクリックします。

  2. F5 キーを押してクエリを実行します。

    通知の配信に関する情報を確認するには、DeliveryStatusDescription 列を参照します。問題がある場合は、アプリケーション ログに補足情報が表示されます。

  3. ViewSubscribersAndDevices.sql を閉じます。

次の課題

このチュートリアルでは、Notification Services アプリケーションの簡単なプロトタイプを作成する方法を学習しました。Notification Services についてさらに学習するには、次のトピックを参照してください。

参照

概念

Notification Services のチュートリアル

その他の技術情報

通知ソリューションの作成
SQL Server Notification Services の紹介

ヘルプおよび情報

SQL Server 2005 の参考資料の入手