股票示例
更新日期: 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。
生成解决方案
如果尚未创建强名称密钥文件,则请使用以下说明生成该密钥文件。
生成强名称密钥文件
打开 Microsoft Visual Studio 2005 命令提示符。单击“开始”,依次指向“所有程序”、“Microsoft .NET Framework SDK 2.0”,然后单击“SDK 命令提示符”。
- 或 -
打开 Microsoft .NET Framework 命令提示符。单击“开始”,依次指向“所有程序”、“Microsoft .NET Framework SDK 2.0”,然后单击“SDK 命令提示符”。
使用更改目录命令 (CD) 将命令提示符窗口的当前目录更改至安装示例的文件夹。
注意: 若要确定示例所在的文件夹,请单击“开始”按钮,依次指向“所有程序”、“Microsoft SQL Server”、“文档和教程”,然后单击“示例目录”。如果使用了默认安装位置,则示例将位于 <system_drive>:\Program Files\Microsoft SQL Server\100\Samples 中。 在命令提示符下,运行以下命令以生成密钥文件:
sn -k SampleKey.snk
重要事项: 有关强名称密钥对的详细信息,请参阅 MSDN 上 .NET 开发中心中的“安全简讯:.NET Framework 中的强名称和安全性”。
生成解决方案,以便可以在创建实例后可以立即启动实例。
生成 Visual Studio 解决方案
如果使用的是 .NET Framework SDK,请执行以下操作:
- 在**“开始”菜单上,依次指向“所有程序”和 Microsoft .NET Framework SDK v2.0,再单击“SDK 命令提示”**。
- 导航到股票示例的根文件夹。对于默认位置,请键入以下命令:
cd C:\Program Files\Microsoft SQL Server\90\Samples\Notification Services\Stock - 键入以下命令以生成解决方案:
[C#]
msbuild Stock.sln
[Visual Basic]
msbuild Stock_VB.sln
或者,如果使用的是 Visual Studio 2005,请执行以下操作:
- 打开所选的解决方案文件(Stock.sln 或 Stock_VB.sln)。
- 生成解决方案。
部署 Notification Services 实例
若要部署 Notification Services 实例,需要执行以下操作:
- 创建 Notification Services 的实例。
- 注册 Notification Services 实例。
- 授予 SQL Server、数据库和文件夹权限。
下面的步骤显示了如何执行每个任务。
步骤 1:创建 Notification Services 的实例。
打开 SQL Server Management Studio 并连接到 SQL Server 的实例。
在对象资源管理器中,右键单击 Notification Services 文件夹,然后选择**“新建 Notification Services 实例”**。
在**“新建 Notification Services 实例”对话框中,单击“浏览”**,然后选择股票示例的根文件夹中的 InstanceConfig.xml 文件。
在**“参数”**框中,输入以下三个参数的值:
- SampleDirectory,股票示例的根文件夹的路径。默认路径为 C:\Program Files\Microsoft SQL Server\90\Samples\Notification Services\Stock。
- NotificationServicesHost,该参数为本地服务器的名称。
- SQLServer,该参数为 SQL Server 实例的名称。
选中**“创建实例后将其启用”**复选框。
单击**“确定”**。
在 Notification Services 创建完实例后,单击**“关闭”**。
步骤 2:注册 Notification Services 的实例。
在 SQL Server Management Studio 中,打开 Notification Services 节点,右键单击 StockInstance,指向**“任务”,然后选择“注册”**。
不要选择任何选项。引擎将由自定义应用程序承载,因此不要创建 Windows 服务。
单击**“确定”**。
Notification Services 完成注册实例后,单击**“关闭”**。
注意: |
---|
如果要使用数据库所有者或系统管理员帐户部署 Notification Services 示例,则无需将 SQL Server 权限授予该帐户。授予这些权限可能会导致错误,当然您可以忽略此错误。部署自己的应用程序时,应使用特权较低的帐户,以提高安全性。 |
步骤 3:授予 SQL Server、Windows 和文件夹权限
在对象资源管理器中,展开**“安全性”**节点。
如果需要创建新的数据库登录帐户,请右键单击**“登录名”并选择“新建登录名”**,然后创建登录帐户:
- 若要使用 Windows 身份验证,请选中**“Windows 身份验证”**,输入注册实例时指定的 Windows 帐户。
- 如果必须使用 SQL Server 身份验证,请选择**“SQL Server 身份验证”**,然后输入在注册实例时指定的相同 SQL Server 登录名和密码。
如果用于运行此示例的登录名已具有对 SQL Server 的访问权限,则用右键单击该登录名并选择**“属性”**。
在**“登录”对话框的左窗格中,选择“用户映射”**。
授予对 StockInstanceNSMain 数据库的权限:
- 在**“映射到此登录名的用户”**框中,选择 StockInstanceNSMain。
- 在**“数据库角色成员身份: StockInstanceNSMain”**框中,选择 NSRunService。
授予对 StockInstanceStock 数据库的权限:
- 在**“映射到此登录名的用户”**框中,选择 StockInstanceStock。
- 在**“数据库角色成员身份: StockInstanceStock”**框中,选择 NSRunService。
单击**“确定”**以应用 SQL Server 权限。
配置 Events 文件夹的安全性:
- 在 Windows 资源管理器中,导航到股票示例的 Events 文件夹。
- 右键单击 Events 文件夹,选择**“共享和安全”,再选择“安全”**选项卡。
- 单击**“添加”**,然后添加用于运行示例的帐户。
- 在**“组或用户名”**框中,选择刚才添加的帐户。
- 在**“权限”框中,选择“读取”和“修改”**权限。
- 单击**“确定”**以应用更改。
配置 Notifications 文件夹的安全性:
- 定位到股票示例的 Notifications 文件夹。
- 右键单击 Notifications 文件夹,选择**“共享和安全”,再选择“安全”**选项卡。
- 单击**“添加”**,然后添加用于运行示例的帐户。
- 在**“组或用户名”**框中,选择刚才添加的帐户。
- 在**“权限”框中,选择“写”**。
- 单击**“确定”**以应用更改。
运行示例
若要运行示例,您需要执行以下操作:
- 启动实例。
- 添加订阅方和订阅。
- 提交事件。
执行这些任务之后,Notification Services 将生成通知。以下过程显示如何执行这些任务,以及如何查看生成的通知。
步骤 1:启动宿主引擎
验证运行宿主引擎的帐户是否是 SQLServer2005NotificationServicesUser$ComputerName Windows 组中的成员(该组具有读取和执行 Notification Services 二进制文件的权限)或验证该帐户是否具有读取和执行 C:\Program Files\Microsoft SQL Server\90\Notification Services 文件夹中文件的权限。
在 Windows 资源管理器中,定位到股票示例的 HostableExecutionEngine\语言\HostableExecutionEngine\bin\Debug 文件夹。
双击 HostableExecutionEngine.exe 以运行承载 Notification Services 引擎的控制台应用程序。
重要提示:不要按 ENTER 键。Notification Services 应用程序必须运行引擎才能生成通知。
步骤 2:添加订阅方、订阅和事件
运行 AddSubscribers.exe。
EXE 文件位于股票示例的 AddSubscribers\语言\AddSubscribers\bin\Debug 子文件夹中。
添加订阅方后,按 Enter 键关闭控制台应用程序。
运行 AddSubscriptions.exe。
EXE 文件位于股票示例的 AddSubscriptions\语言\AddSubscriptions\bin\Debug 子文件夹中。
添加订阅方之后,请按 ENTER 键以关闭控制台应用程序。
运行 NonHostedEventProvider.exe。
EXE 文件位于股票示例的 NonHostedEventProvider\语言\NonHostedEventProvider\bin\Debug 子文件夹中。
这将使用非宿主事件提供程序(在应用程序的外部运行)将事件添加到应用程序。下一步将说明如何将事件提交到宿主文件系统观察器事件提供程序。
注意: |
---|
对于生产应用程序,或者如果您正在受限帐户下运行此应用程序,请将应用程序的 SQL Server 登录名添加到实例和应用程序数据库中的 NSSubscriberAdmin 数据库角色。 |
步骤 3:通过删除事件文件来提交事件
在 Windows 资源管理器中,定位到股票示例的根文件夹,然后将 EventData.xml 文件复制到 Events 子文件夹中。
注意: 因为您在此前已经使用非宿主事件提供程序提交了事件,所以此步骤是可选的。如果不想提交其他事件和生成其他通知,请继续执行下一步以查看通知。 如果您放置了文件,文件系统观察器事件提供程序将从文件中读取数据,将其提交给应用程序,然后将文件扩展名更改为 .done。
如果在读取或提交数据时发生错误,则事件提供程序将把文件扩展名更改为 .err。请在 Windows 事件查看器中查看应用程序日志,了解有关所有错误的其他详细信息。
步骤 4:查看通知
给 Notification Services 大约 1 分钟的时间来生成通知。
使用 Windows 资源管理器,定位到股票示例的 Notifications 文件夹。您会找到名为 FileNotifications.txt 的文件。该文件包含了此应用程序发送的所有通知。
导航到放置电子邮件的文件夹。通常位于 C:\Inetpub\mailroot 下的一个文件夹中。根据 SMTP 服务器状态,通知应该在 Pickup 文件夹或 Queue 文件夹中。如果运行了 SMTP 服务,则邮件将移动到 Badmail 文件夹中。
注意: |
---|
如果希望在不重新生成示例或不更该示例的情况下生成其他通知,请运行以下查询:
USE [StockInstanceStock]
DELETE FROM [StockInstanceStock].[dbo].[StockEventsChron] |
停止引擎
在提交事件和查看结果通知均完成之后,停止 Notification Services 引擎。
停止引擎
- 在 HostableExecutionEngine 控制台窗口中,按 ENTER 键以停止引擎。
删除示例
使用以下过程删除股票示例。
删除股票示例
在对象资源管理器中,展开 Notification Services。
右键单击 StockInstance,指向**“任务”,然后选择“撤销注册”**。
右键单击 StockInstance,指向**“任务”,然后选择“删除”**。
请参阅
其他资源
宿主 Notification Services 引擎
SQL Server Notification Services 示例
保护 Notification Services 的安全
帮助和信息
更改历史记录
发布日期 | 历史记录 |
---|---|
2006 年 7 月 17 日 |
|
2006 年 4 月 14 日 |
|
2005 年 12 月 5 日 |
|