库存跟踪器示例

更新日期: 2006 年 7 月 17 日

库存跟踪器示例显示了如何通过使用条件操作使订阅方可以为其订阅定义自己的查询子句。

应用场景

您希望公司的雇员在库存级别更改时收到通知。由于不同的个人查找不同的数据(例如低库存、高库存或明显的库存更改),因此您希望大家可以为其订阅创建他们自己的条件。

在此示例中,订阅方 Stephanie 和 David 分别创建了一个订阅。Stephanie 的订阅指定她希望在产品“Road-250 Black, 48”的最终部件库存为 35 或更低单元时收到通知。David 的订阅指定他希望在产品“HL Crankarm”的子部件库存为 250 或更低单元时收到通知。

事件由 AdventureWorks Production.Inventory 表的更新触发器添加至系统。无论库存数据何时更新,触发器都会把事件提交到库存跟踪器应用程序中。在事件抵达的生成器量程结尾处,库存跟踪器应用程序激发将事件数据与订阅数据进行匹配并生成通知的规则。

通知通过电子邮件发送至订阅方。

语言

XML、XSLT、Transact-SQL、Microsoft Visual C# 或 Microsoft Visual Basic

功能

库存跟踪器示例使用 Notification Services 的以下功能。

应用领域 功能

事件类

基本事件队列(无历史记录)。

订阅类

事件驱动并使用条件操作以支持灵活订阅逻辑的订阅规则。无历史记录。

通知类

摘要传递。

事件提供程序

非宿主事件提供程序,在 AdventureWorks 数据库中作为更新触发器实现。

内容格式化程序

XSLT 内容格式化程序。

传递协议

文件和 SMTP 传递协议。

Notification Services 引擎

注册实例时创建的 Microsoft Windows 服务。

必备组件

在运行此示例之前,请确保安装了下列软件:

  • Microsoft SQL Server 2005,包括下列组件:
    • 数据库引擎。
    • Notification Services。
    • SQL Server Management Studio。
    • Notification Services 示例。这些示例包含在 SQL Server 2005 中。您可以从 SQL Server 开发人员中心网站下载这些示例的最新版本。
    • AdventureWorks OLTP 示例数据库。此数据库随 SQL Server 2005 一起提供,也可以从 SQL Server 开发人员中心网站上获取。有关详细信息,请参阅运行安装程序安装 AdventureWorks 示例数据库和示例
  • .NET Framework SDK 2.0 或 Microsoft Visual Studio 2005。您可以免费获取 .NET Framework SDK。请参阅安装 .NET Framework SDK
  • 简单邮件传输协议 (SMTP) 服务,该服务是 Internet 信息服务 (IIS) 的一个组件。在 Microsoft Windows Server 2003 中,默认情况下,SMTP 不与 IIS 一起安装。请参阅 IIS 文档中关于如何安装并使用 SMTP 服务的说明。
    ms161543.note(zh-cn,SQL.90).gif注意:
    运行此示例前,请验证 SMTP 服务已停止。停止 SMTP 服务将消息保持在服务器上,而不是允许 SMTP 服务尝试将其发送至并不存在的订阅方。

生成示例

若要生成实例,需要执行以下操作:

  • 创建用于计算规则的 SQL Server 登录帐户。
  • 创建 Notification Services 的实例。
  • 注册 Notification Services 实例。
  • 为 Windows 服务授予数据库权限。
  • 创建触发器并将数据库权限授予规则计算帐户。

以下过程显示了如何执行库存跟踪器示例的每一项任务。

步骤 1:创建用于规则计算的 SQL Server 登录帐户

  1. 打开 SQL Server Management Studio 并连接到 SQL Server 的实例。

    当应用程序具有包含条件操作的规则时,该应用程序需要用于计算条件的登录。使用此单独的登录,您可以限制订阅方对其创建规则的数据,并有助于保护敏感数据。

    在创建 Notification Services 实例之前,服务器上必须存在此登录,而数据库中决不能存在此登录。此示例使用名为 NSRulesEvaluator 的 SQL Server 身份验证登录。您可以在自己的应用程序中使用 SQL Server 身份验证或 Windows 身份验证。

    ms161543.note(zh-cn,SQL.90).gif注意:
    请尽可能使用 Windows 身份验证。
  2. 在对象资源管理器中,展开**“安全性”**节点。

  3. 右键单击**“登录”,再选择“新建登录”**。

  4. 选择**“SQL Server 身份验证”**。

    此帐户不用于与服务器连接。数据库引擎实例中的 Notification Services 生成器使用它来计算条件。

  5. 在**“登录名”**框中,输入 NSRulesEvaluator

    输入 NSRulesEvaluator 登录名的密码。

  6. 在**“数据库”**框中,选择 AdventureWorks

  7. 单击**“确定”**。

    如果显示对话框,说明登录无法访问默认数据库,请单击**“确定”**。您将在此示例以后的部分中授予数据库权限。

步骤 2:创建 Notification Services 的实例。

  1. 在对象资源管理器中,右键单击 Notification Services,再选择**“新建 Notification Services 实例”**。

  2. 在**“新建 Notification Services 实例”对话框中,单击“浏览”**,导航至 InventoryTracker 文件夹,再选择 InstanceConfig.xml 文件。

  3. 在**“参数”**框中,输入以下三个参数的值:

    • SampleDirectory 是库存跟踪器示例的根文件夹的路径。默认路径为 C:\Program Files\Microsoft SQL Server\90\Samples\Notification Services\InventoryTracker\。
    • SQLServer 是数据库引擎实例的名称。
    • NotificationServicesHost 是运行 Notification Services 的服务器名称。对于这些示例,这应是本地计算机的名称。
  4. 选中**“创建实例后将其启用”**复选框。

  5. 单击**“确定”**。

  6. 在 Notification Services 创建完实例后,单击**“关闭”**。

步骤 3:注册 Notification Services 的实例。

  1. 在对象资源管理器中,展开 Notification Services 节点,右键单击 InventoryTrackerInstance,指向**“任务”,再选择“注册”**。

  2. 在**“注册”对话框中,选中“创建 Windows 服务”**复选框。Windows 服务将在此计算机上运行 Notification Services 的实例。

  3. 在**“服务登录”**下,输入 Windows 登录帐户和密码。这是运行服务所使用的 Windows 帐户。如果使用 Windows 身份验证访问 SQL Server,则 Windows 服务还将使用此帐户连接到 SQL Server。

  4. 若要使用 SQL Server 身份验证访问 SQL Server,请选择**“身份验证”下的“SQL Server 身份验证”**,然后输入 SQL Server 登录名和密码。

    建议您使用 Windows 身份验证。

  5. 单击**“确定”**。

  6. Notification Services 完成注册实例后,单击**“关闭”**。

ms161543.note(zh-cn,SQL.90).gif注意:
如果要使用数据库所有者或系统管理员帐户部署 Notification Services 示例,则无需将 SQL Server 权限授予该帐户。授予这些权限可能会导致错误,当然您可以忽略此错误。部署自己的应用程序时,应使用特权较低的帐户,以提高安全性。

步骤 4:为 Windows 服务授予数据库权限

  1. 在对象资源管理器中,展开**“安全性”**。

  2. 如果需要为 Windows 服务创建新的数据库登录帐户,请右键单击**“登录名”并选择“新建登录名”**,然后创建登录帐户:

    • 若要使用 Windows 身份验证,请选择**“Windows 身份验证”**,然后输入在注册实例时指定的相同 Windows 帐户。
    • 如果必须使用 SQL Server 身份验证,请选择**“SQL Server 身份验证”**,然后输入在注册实例时指定的相同 SQL Server 登录名和密码。
  3. 如果 Windows 服务所使用的登录名已具有对 SQL Server 的访问权限,则用右键单击该登录名并选择**“属性”**。

  4. 在**“登录”对话框的左窗格中,选择“用户映射”**。

  5. 授予对 AdventureWorks 数据库的权限:

    1. 在**“映射到此登录名的用户”**框中,选择 AdventureWorks
    2. 在**“数据库角色成员身份: AdventureWorks”**框中,选择 NSRunService
  6. 单击**“确定”**应用权限。

  7. 配置 Notifications 文件夹的安全性:

    1. 导航到示例的 Notifications 文件夹。
    2. 右键单击 Notifications 文件夹,选择**“共享和安全”,再选择“安全”**选项卡。
    3. 单击**“添加”**,然后添加 Windows 服务所使用的帐户。
    4. 在**“组或用户名”**框中,选择刚才添加的帐户。
    5. 在**“权限”框中,选择“写”**。
    6. 单击**“确定”**以应用更改。

步骤 5:配置数据库触发器并授予数据库权限

  1. 在 SQL Server Management Studio**“文件”菜单上,选择“打开”,再选择“文件”**。

  2. 在“文件”对话框中,打开 SetupInventoryTrackerSample.sql。

    此文件的默认位置为 C:\Program Files\Microsoft SQL Server\90\Samples\Notification Services\InventoryTracker\SQLScripts。

  3. 如果显示**“连接到数据库引擎”对话框,请输入连接信息,然后单击“连接”**。

  4. 按 F5 键运行 Transact-SQL 语句。

生成强名称密钥文件

如果尚未创建强名称密钥文件,则请使用以下说明生成该密钥文件。

生成强名称密钥文件

  1. 打开 Microsoft Visual Studio 2005 命令提示符。单击“开始”,依次指向“所有程序”、“Microsoft .NET Framework SDK 2.0”,然后单击“SDK 命令提示符”

    - 或 -

    打开 Microsoft .NET Framework 命令提示符。单击“开始”,依次指向“所有程序”、“Microsoft .NET Framework SDK 2.0”,然后单击“SDK 命令提示符”

  2. 使用更改目录命令 (CD) 将命令提示符窗口的当前目录更改至安装示例的文件夹。

    ms161543.note(zh-cn,SQL.90).gif注意:
    若要确定示例所在的文件夹,请单击“开始”按钮,依次指向“所有程序”、“Microsoft SQL Server”、“文档和教程”,然后单击“示例目录”。如果使用了默认安装位置,则示例将位于 <system_drive>:\Program Files\Microsoft SQL Server\100\Samples 中。
  3. 在命令提示符下,运行以下命令以生成密钥文件:

    sn -k SampleKey.snk

    ms161543.note(zh-cn,SQL.90).gif重要事项:
    有关强名称密钥对的详细信息,请参阅 MSDN 上 .NET 开发中心中的“安全简讯:.NET Framework 中的强名称和安全性”。

运行示例

若要运行该示例,您需要执行以下操作:

  • 启动实例。
  • 添加订阅方和订阅。
  • 放置包含事件的 XML 文件。
  • 查看生成的通知。

以下过程显示如何执行这些任务,以及如何查看生成的通知。

步骤 1:启动实例

  1. 在对象资源管理器中,展开 Notification Services

  2. 右键单击 InventoryTrackerInstance,再选择**“启动”**。

步骤 2:添加订阅方和订阅

  1. 生成 InventoryTracker 或 InventoryTracker_VB Visual Studio 解决方案

    如果使用的是 Microsoft .NET Framework SDK,请执行以下操作:

    1. 在**“开始”菜单上,依次指向“所有程序”Microsoft .NET Framework SDK v2.0,再单击“SDK 命令提示”**。
    2. 导航到库存跟踪器示例的根文件夹。对于默认位置,请键入以下命令:
      cd \Program Files\Microsoft SQL Server\90\Samples\Notification Services\InventoryTracker
    3. 键入以下命令以生成解决方案
      [C#]
      msbuild InventoryTracker.sln
      [Visual Basic]
      msbuild InventoryTracker_VB.sln

    如果使用是 Visual Studio 2005,请执行以下操作:

    1. 打开选择的解决方案文件(InventoryTracker.sln 或 InventoryTracker_VB.sln)。
    2. 按 F6 以生成解决方案。
  2. 运行 AddSubscribers.exe。

    此文件的默认位置是 C:\Program Files\Microsoft SQL Server\90\Samples\Notification Services\InventoryTracker\AddSubscribers\language\AddSubscribers\bin\Debug.

  3. 运行 AddSubscriptions.exe。

    C:\Program Files\Microsoft SQL Server\90\Samples\Notification Services\InventoryTracker\AddSubscriptions\language\AddSubscriptions\bin\Debug。

ms161543.note(zh-cn,SQL.90).gif注意:
对于生产应用程序,或者如果您正在受限帐户下运行此应用程序,请将应用程序的 SQL Server 登录名添加到实例和应用程序数据库中的 NSSubscriberAdmin 数据库角色。

步骤 3:触发器事件

  1. 在 SQL Server Management Studio**“文件”菜单上,选择“打开”,再选择“文件”**。

  2. 在“文件”对话框中,打开 UpdateProductInventory.sql。

    此文件的默认位置为 C:\Program Files\Microsoft SQL Server\90\Samples\Notification Services\InventoryTracker\SQLScripts。

    此脚本用于向 AdventureWorks 数据库添加更新触发器,然后向 NSRulesEvaluator 登录授予数据库权限。

  3. 如果显示**“连接到数据库引擎”对话框,请输入连接信息,然后单击“连接”**。

步骤 4:查看通知

  1. 给 Notification Services 大约 1 分钟的时间来生成通知。

  2. 使用 Windows 资源管理器,导航到库存跟踪器示例的 Notifications 文件夹。您可以找到一个名为 FileNotifications.txt 的文件。此文件包含基于文件的通知。

  3. 导航到放置电子邮件的文件夹。通常位于 C:\Inetpub\mailroot 下的一个文件夹中。根据 SMTP 服务器状态,通知应该在 Pickup 文件夹或 Queue 文件夹中。如果运行了 SMTP 服务,则邮件将移动到 Badmail 文件夹中。

步骤 5:重置库存

  1. 在 SQL Server Management Studio**“文件”菜单上,选择“打开”,再选择“文件”**。

  2. 在“文件”对话框中,打开 ResetProductInventory.sql。

    此文件的默认位置为 C:\Program Files\Microsoft SQL Server\90\Samples\Notification Services\InventoryTracker\SQLScripts。

    该脚本使 AdventureWorks 数据库返回到它以前的状态,这样,您就可以再次运行该示例。

  3. 如果显示**“连接到数据库引擎”对话框,请输入连接信息,然后单击“连接”**。

删除示例

使用以下过程删除库存跟踪器示例。

删除库存跟踪器示例

  1. 在 SQL Server Management Studio 对象资源管理器中,打开 Notification Services 文件夹。

  2. 右键单击 InventoryTrackerInstance,再选择**“停止”**。

  3. 右键单击 InventoryTrackerInstance,指向**“任务”,再选择“撤消注册”**。

  4. 右键单击 InventoryTrackerInstance,指向**“任务”,再选择“删除”**。

请参阅

其他资源

SQL Server Notification Services 示例

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2006 年 4 月 14 日

已添加的内容:
  • 添加了关于使用数据库所有者权限运行示例的注释。

2005 年 12 月 5 日

更改的内容:
  • 更改了有关生成密钥文件的说明,包括密钥文件的名称和位置。
  • 添加了有关规则计算器帐户的最佳安装做法的信息。