股票示例

更新日期: 2006 年 7 月 17 日

股票示例是 Microsoft SQL Server 2005 Notification Services 应用程序,它使用事件驱动订阅和计划订阅来根据股票市场数据生成通知。如果股票价格超过指定的触发器值,订阅用户将收到通知。

此示例还说明了如何在自定义应用程序中承载 Notification Services 引擎,而不是使用 Notification Services 创建的 Microsoft Windows 服务。

应用场景

投资者订阅关于股票价格的通知。每个订阅指定一个股票代码,订阅可以是事件驱动订阅,也可以是计划订阅。

对事件驱动订阅而言,如果在股票事件到达时下列条件满足,则 Notification Services 将生成通知:

  • 事件中的股票代码与订阅中的股票代码相匹配。
  • 新的股票价格高于订阅的触发器值。
  • 在股票事件历史记录中,该股票的上一个最高价格低于订阅的触发器值。这可以确保订阅方不会获得同一支股票的多个通知。

如果新的股票价格高于历史记录中的价格,或者历史记录中不存在该股票代码,则 Notification Services 将更新历史记录。

每次只能传递一个事件驱动订阅通知。

对于计划订阅,Notification Services 将用股票价格历史记录中的数据和计划订阅比较。如果订阅中的股票代码与历史记录中的股票代码相符合,则产生匹配。

对于每个匹配,Notification Services 都将生成一个通知。分发服务器将单个订阅方的多个通知合并为一个通知,提供与订阅方股票相关的一套数据。

语言

XML、XSD、XSLT 和 Microsoft Visual C# 或 Microsoft Visual Basic。

功能

应用领域 功能

事件类

一个事件类和一个事件历史记录。

订阅类

订阅类有两种,一种针对事件驱动订阅,一种针对计划订阅。

通知类

通知类有两种,一种针对事件驱动通知,一种针对计划通知。计划通知使用摘要传递。

事件提供程序

一个文件系统观察器事件提供程序和一个自定义、非宿主事件提供程序。

内容格式化程序

Notification Services XSLT 内容格式化程序。每个通知类都会为内容格式化程序指定自己的 XSLT 文件。

传递协议

文件和 SMTP 传递协议。

Notification Services 引擎

承载在控制台应用程序中。

必备组件

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

  • SQL Server 2005,包括下列组件:
    • 数据库引擎.
    • Notification Services。
    • SQL Server Management Studio.
    • Notification Services 示例。这些示例包含在 SQL Server 2005 中。您可以从 SQL Server 开发人员中心网站上下载这些示例的最新版本。
    • .NET Framework SDK 2.0 或 Microsoft Visual Studio 2005。您可以免费获取 .NET Framework SDK。请参阅安装 .NET Framework SDK

生成解决方案

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

生成强名称密钥文件

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

    - 或 -

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

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

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

    sn -k SampleKey.snk

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

生成解决方案,以便可以在创建实例后可以立即启动实例。

生成 Visual Studio 解决方案

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

    1. 在**“开始”菜单上,依次指向“所有程序”Microsoft .NET Framework SDK v2.0,再单击“SDK 命令提示”**。
    2. 导航到股票示例的根文件夹。对于默认位置,请键入以下命令:
      cd C:\Program Files\Microsoft SQL Server\90\Samples\Notification Services\Stock
    3. 键入以下命令以生成解决方案:
      [C#]
      msbuild Stock.sln
      [Visual Basic]
      msbuild Stock_VB.sln
  • 或者,如果使用的是 Visual Studio 2005,请执行以下操作:

    1. 打开所选的解决方案文件(Stock.sln 或 Stock_VB.sln)。
    2. 生成解决方案。

部署 Notification Services 实例

若要部署 Notification Services 实例,需要执行以下操作:

  • 创建 Notification Services 的实例。
  • 注册 Notification Services 实例。
  • 授予 SQL Server、数据库和文件夹权限。

下面的步骤显示了如何执行每个任务。

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

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

  2. 在对象资源管理器中,右键单击 Notification Services 文件夹,然后选择**“新建 Notification Services 实例”**。

  3. 在**“新建 Notification Services 实例”对话框中,单击“浏览”**,然后选择股票示例的根文件夹中的 InstanceConfig.xml 文件。

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

    • SampleDirectory,股票示例的根文件夹的路径。默认路径为 C:\Program Files\Microsoft SQL Server\90\Samples\Notification Services\Stock。
    • NotificationServicesHost,该参数为本地服务器的名称。
    • SQLServer,该参数为 SQL Server 实例的名称。
  5. 选中**“创建实例后将其启用”**复选框。

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

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

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

  1. 在 SQL Server Management Studio 中,打开 Notification Services 节点,右键单击 StockInstance,指向**“任务”,然后选择“注册”**。

    不要选择任何选项。引擎将由自定义应用程序承载,因此不要创建 Windows 服务。

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

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

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

步骤 3:授予 SQL Server、Windows 和文件夹权限

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

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

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

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

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

    1. 在**“映射到此登录名的用户”**框中,选择 StockInstanceNSMain
    2. 在**“数据库角色成员身份: StockInstanceNSMain”**框中,选择 NSRunService
  6. 授予对 StockInstanceStock 数据库的权限:

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

  8. 配置 Events 文件夹的安全性:

    1. 在 Windows 资源管理器中,导航到股票示例的 Events 文件夹。
    2. 右键单击 Events 文件夹,选择**“共享和安全”,再选择“安全”**选项卡。
    3. 单击**“添加”**,然后添加用于运行示例的帐户。
    4. 在**“组或用户名”**框中,选择刚才添加的帐户。
    5. 在**“权限”框中,选择“读取”“修改”**权限。
    6. 单击**“确定”**以应用更改。
  9. 配置 Notifications 文件夹的安全性:

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

运行示例

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

  • 启动实例。
  • 添加订阅方和订阅。
  • 提交事件。

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

步骤 1:启动宿主引擎

  1. 验证运行宿主引擎的帐户是否是 SQLServer2005NotificationServicesUser$ComputerName Windows 组中的成员(该组具有读取和执行 Notification Services 二进制文件的权限)或验证该帐户是否具有读取和执行 C:\Program Files\Microsoft SQL Server\90\Notification Services 文件夹中文件的权限。

  2. 在 Windows 资源管理器中,定位到股票示例的 HostableExecutionEngine\语言\HostableExecutionEngine\bin\Debug 文件夹。

  3. 双击 HostableExecutionEngine.exe 以运行承载 Notification Services 引擎的控制台应用程序。

    重要提示:不要按 ENTER 键。Notification Services 应用程序必须运行引擎才能生成通知。

步骤 2:添加订阅方、订阅和事件

  1. 运行 AddSubscribers.exe。

    EXE 文件位于股票示例的 AddSubscribers\语言\AddSubscribers\bin\Debug 子文件夹中。

    添加订阅方后,按 Enter 键关闭控制台应用程序。

  2. 运行 AddSubscriptions.exe。

    EXE 文件位于股票示例的 AddSubscriptions\语言\AddSubscriptions\bin\Debug 子文件夹中。

    添加订阅方之后,请按 ENTER 键以关闭控制台应用程序。

  3. 运行 NonHostedEventProvider.exe。

    EXE 文件位于股票示例的 NonHostedEventProvider\语言\NonHostedEventProvider\bin\Debug 子文件夹中。

    这将使用非宿主事件提供程序(在应用程序的外部运行)将事件添加到应用程序。下一步将说明如何将事件提交到宿主文件系统观察器事件提供程序。

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

步骤 3:通过删除事件文件来提交事件

  1. 在 Windows 资源管理器中,定位到股票示例的根文件夹,然后将 EventData.xml 文件复制到 Events 子文件夹中。

    ms160739.note(zh-cn,SQL.90).gif注意:
    因为您在此前已经使用非宿主事件提供程序提交了事件,所以此步骤是可选的。如果不想提交其他事件和生成其他通知,请继续执行下一步以查看通知。

    如果您放置了文件,文件系统观察器事件提供程序将从文件中读取数据,将其提交给应用程序,然后将文件扩展名更改为 .done。

    如果在读取或提交数据时发生错误,则事件提供程序将把文件扩展名更改为 .err。请在 Windows 事件查看器中查看应用程序日志,了解有关所有错误的其他详细信息。

步骤 4:查看通知

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

  2. 使用 Windows 资源管理器,定位到股票示例的 Notifications 文件夹。您会找到名为 FileNotifications.txt 的文件。该文件包含了此应用程序发送的所有通知。

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

ms160739.note(zh-cn,SQL.90).gif注意:
如果希望在不重新生成示例或不更该示例的情况下生成其他通知,请运行以下查询: USE [StockInstanceStock] DELETE FROM [StockInstanceStock].[dbo].[StockEventsChron]

停止引擎

在提交事件和查看结果通知均完成之后,停止 Notification Services 引擎。

停止引擎

  • 在 HostableExecutionEngine 控制台窗口中,按 ENTER 键以停止引擎。

删除示例

使用以下过程删除股票示例。

删除股票示例

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

  2. 右键单击 StockInstance,指向**“任务”,然后选择“撤销注册”**。

  3. 右键单击 StockInstance,指向**“任务”,然后选择“删除”**。

请参阅

其他资源

宿主 Notification Services 引擎
SQL Server Notification Services 示例
保护 Notification Services 的安全

帮助和信息

获取 SQL Server 2005 帮助

更改历史记录

发布日期 历史记录

2006 年 7 月 17 日

已添加的内容:
  • 在“运行示例”的步骤 3 和步骤 4 中,添加了与使用非宿主事件提供程序和文件系统观察器事件提供程序提交事件有关的选项的信息。
  • 添加了有关使用 NSSubscriberAdmin 数据库角色的说明。

2006 年 4 月 14 日

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

2005 年 12 月 5 日

更改的内容:
  • 更改了有关生成密钥文件的说明,包括密钥文件的名称和位置。
  • 更新了权限部分,以阐明哪个帐户需要权限。