第 11 课:向 Weather 应用程序提交事件

在本步骤中,将使用一个 Transact-SQL 脚本向 Weather 应用程序提交事件,然后查看结果通知。

事件数据

事件是通知应用程序用于生成通知的数据。您编写的通知生成查询将事件数据和订阅数据联接起来以生成通知,如第 5 课中的查询。

在每个有数据要处理的生成器量程期间,将激发生成通知的查询。事件规则将在一个或多个事件批次所到达的任一量程中运行。预定规则将在具有要处理的预定订阅的任一量程中运行。

如果没有事件数据,则不会运行任何规则。因此也就不会生成通知。

WeatherDate 事件

对于此应用程序,将使用事件提交存储过程提交一批事件。首先,将使用 NSEventBeginBatchWeatherData 存储过程打开一个事件批次。将 WeatherSPEventProvider 非宿主事件提供程序指定为第 6 课中定义的事件提供程序。

ms170427.Caution(zh-cn,SQL.90).gif注意:
请不要单独运行这些语句。这些语句将打开和关闭一个事件批次,必须在同一个事务中运行。若要运行这些查询,请运行本课稍后介绍的 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 存储过程添加三个天气事件。必须提供事件批次 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'

用此存储过程提交了三个事件后,即可使用 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 运行查询。

    应该接收到两个结果集。第一个结果集返回一个 EventCount 值 3。第二个结果集返回一个事件批次 ID 1。

查看事件数据

使用 ViewWeatherEvents.sql 查询查看刚添加的事件。

查看事件数据

  1. 在解决方案资源管理器中,打开 ViewWeatherEvents.sql。

  2. 检查 Transact-SQL 代码。

  3. 按 F5 运行查询。

如果提交了多个事件批次,请对 EventBatchId 参数进行相应的更改。

查看通知

大约 30 秒后,Notification Services 应在“通知”文件夹中创建了一个 FileNotifications.htm 文件。打开此文件即可查看通知数据。您应收到三个具有以下类似内容的通知:

  • 通知 ID:1 通知类名称:WeatherNotifications 订阅方 ID:stephanie 设备地址:stephanie@adventure-works.com 协议字段:正文:Weather report for the city of Seattle [2/21/2005 2:01:00 PM]: Sunny
    预计最低温度:31 F。
    预计最高温度:52 F。
    有关详细信息,请访问我们的网站 http://www.msnbc.com/news/wea\_front.asp?ta=y\&tab=BW\&tp=\&czstr=Seattle
    感谢您使用 SQL Server Notification Services
  • 通知 ID:2 通知类名称:WeatherNotifications 订阅方 ID:david 设备地址:david@adventure-works.com 协议字段:正文:Weather report for the city of Orlando [2/22/2005 2:01:00 AM]: Partly Cloudy
    预计最低温度:59 F。
    预计最高温度:81 F。
    有关详细信息,请访问我们的网站 http://www.msnbc.com/news/wea\_front.asp?ta=y\&tab=BW\&tp=\&czstr=Orlando
    感谢您使用 SQL Server Notification Services
  • 通知 ID:3 通知类名称:WeatherNotifications 订阅方 ID:richard 设备地址:richard@adventure-works.com 协议字段:正文:Weather report for the city of Seattle [2/21/2005 2:01:00 PM]: Sunny
    预计最低温度:31 F。
    预计最高温度:52 F。
    有关详细信息,请访问我们的网站 http://www.msnbc.com/news/wea\_front.asp?ta=y\&tab=BW\&tp=\&czstr=Seattle
    感谢您使用 SQL Server Notification Services

由于使用的是内置文件传递协议,因此事件生成的三个通知都在一个文件内。如果提交更多事件,增加的通知将追加到此文件中。

另注意,每个通知都有一个标题。此标题可以显示有关通知的信息,其中包括订阅方 ID 和设备地址。通知的实际文本从“正文:”之后开始。

故障排除

如果一分钟后还没有在“通知”文件夹中看到 FileNotifications.htm 文件,请在 Windoes 事件查看器中查看有关 Notification Services 事件的应用程序日志。Windows 服务可能没有通知文件夹的写入权限。

也可以通过运行 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 帮助