关于 Notification Services 的常见问题
Microsoft 对下列 Microsoft Notification Services 用户常见问题进行了解答。
问题和解答
Notification Services 与 SQL Server 代理的区别是什么?
SQL Server 代理是为了根据服务器或数据库的状况向 SQL Server 管理员发送消息或执行预定义任务而专门创建的。
相反,Notification Services 从各种数据源收集数据,将事件与多个用户定义的订阅进行匹配,然后通过各种(几乎是所有的)协议将已格式化的消息发送给所有可接受这些消息的设备。
虽然您可以将 SQL Server 代理自定义为使用触发器向多个用户发送消息,但 SQL Server 代理并未设计为可扩展至支持数千或数百万用户。Notification Services 可扩展至支持数百万用户,每天发送数百万条通知。
此外,作为一个开发平台,Notification Services 提供了可以缩短创建和运行应用程序的时间的一些功能。SQL Server 代理不是一个开发平台,所以未提供类似功能。
有关 Notification Services 的详细信息,请参阅SQL Server Notification Services 简介。
是否可以在一台服务器上运行多个通知应用程序?
是的。您可以部署多个 Notification Services 实例;每个实例可承载一个或多个应用程序。可以在一台服务器上运行多个实例;还可以在一台服务器上运行多个不同版本的 Notification Services。
若要确定一台服务器可运行的应用程序的数量,必须检查每个应用程序加在服务器上的处理负载。如果一台服务器上运行的应用程序太多,会降低其性能。
有关详细信息,请参阅计划 Notification Services 系统。
从发生事件到生成通知需要多长时间?
首先,并不是所有订阅都是由事件触发的。某些订阅指定通知的计划。在这种情况下,将根据定义的计划发送通知,而不是在事件发生时发送。
对于由事件触发的通知,事件发生与通知传递之间的“滞后时间**”在很大程度上取决于应用程序的设计。通知滞后时间有下列原因:
- 事件必须提交到 Notification Services。事件发生到事件提供程序按事件批次提交该事件之间的时间是延迟的一个原因。
- 生成器根据由生成器的 QuantumDuration 属性值确定的计划运行。如果量程持续时间为 60 秒,则在使用事件批次创建通知之前有 60 秒的滞后时间。
- 生成器必须将事件与订阅进行匹配才能生成通知。匹配操作由一个或多个 Transact-SQL 查询执行。这些查询的性能也会影响生成通知的滞后时间。一般说来,同时评估的事件和订阅越多,此过程花费的时间就越长。采用优化的规则与精选的索引可以减小匹配滞后时间。
- 分发服务器根据由分发服务器的 QuantumDuration 属性值确定的计划运行。与生成器一样,如果量程持续时间为 60 秒,则在分发服务器处理通知批次之前有 60 秒的滞后时间。
- 分发服务器必须格式化通知并将其打包才能进行传递。格式化操作由内容格式化程序对象执行。复杂的格式化操作比简单格式化操作花费的时间长,将已格式化的通知发送到传递服务也要花费一些时间。例如,将通知投递到 HTTP 服务器可能需要 30 秒。
分发服务器将通知发送到传递服务(如简单邮件传输协议 (SMTP) 服务器)之后,Notification Services 就不再控制发送通知的滞后时间。
开发 Notification Services 应用程序是否需要安装 Microsoft Visual Studio 2005?
不需要。Microsoft Visual Studio 不是必需的,但它可以使开发更方便。
如果开发的应用程序将使用标准事件提供程序与内容格式化程序,则可使用以下方法生成该应用程序:创建 XML 应用程序定义文件 (ADF),然后通过创建 XML 实例配置文件 (ICF) 来定义承载该应用程序的实例。您可以使用任何文本编辑器或 XML 编辑器创建这些 XML 文件。
如果希望使用 Notification Services 管理对象 (NMO) 生成应用程序,或者正在生成订阅管理界面、自定义事件提供程序和内容格式化程序,则您可使用 Visual Studio 开发环境创建这些对象。但是,并不要求您必须使用 Visual Studio。您可以使用任何文本编辑器编写代码;但必须安装 Microsoft .NET Framework SDK 并编译您的代码。
与非宿主事件提供程序相比,宿主事件提供程序的好处是什么?
实现宿主提供程序需要的开发工作量通常较少,因为 Notification Services 实例加载 Notification Services API 并维护用于激活事件提供程序的计划。可以像对其他 Notification Services 组件和服务那样启用和禁用宿主提供程序。
如果现有的基础结构(如客户义关系管理应用程序或 Web 应用程序)可以提交事件,则非宿主事件提供程序很有用。非宿主事件提供程序只列在应用程序定义文件 (ADF) 中,因此可供订阅类引用。
我已经用非托管代码编写了一个订阅管理应用程序。我是否可以从自己的应用程序调用别人的 API?
Notification Services 对简单订阅支持 COM interop。不过,不能使用 COM interop 创建基于条件的订阅,因为 Microsoft.SqlServer.NotificationServices.Rules 命名空间中的类不支持 COM。
有关详细信息,请参阅带有 Notification Services 的 COM Interop。
请参阅
任务
解决常见 Notification Services 问题
配置 Notification Services 事件日志记录
使用事件消息