订阅
订阅数据驻留在订阅 COM+ 目录中。 可以使用组件服务管理工具或通过 ICOMAdminCatalog::InstallComponent 接口创建订阅。
SubscriptionsForComponent 集合用于添加、删除或更改与订阅相关的信息。 SubscriptionsForComponent 集合是组件的子集合。 若要添加订阅,请获取组件的 SubscriptionsForComponent 集合,并使用 Add 方法将条目添加到集合中。 若要设置订阅对象的各种属性,请使用 Value 属性。 若要保存更改,请使用 SubscriptionsForComponent 集合对象上的 SaveChanges。
还可以使用组件服务管理工具修改订阅属性的某些(而非全部)属性。 订阅指定以下信息:
- 订阅者的标识和位置
- 传递方法
- 要传送的事件方法
- 订阅服务器要从中接收事件的事件类组件的事件类对象和 PublisherID 属性
订阅独立于事件类对象存在。 可以通过将 Enabled 属性设置为 False 来禁用订阅。 COM+ 事件不会调用禁用的订阅。
三种类型的订阅如下所示:
-
持久
-
永久性订阅驻留在 COM+ 目录中,独立于订阅者的生存期。 永久性订阅在系统重启后幸存下来。 通常,在订阅者计算机上安装应用程序时创建永久性订阅,并在删除应用程序时删除。 创建永久性订阅后,每次应将事件传递到订阅服务器时,COM+ 事件都会激活订阅服务器。
当发布者实例化并调用 事件类 对象时,该对象将查找 COM+ 目录中的所有永久性订阅,并创建每个对象的新实例。 创建过程可以是直接的,也可以是通过排队组件的名字对象。 通过订阅的 SubscriberMoniker 属性指定订阅服务器对象。 永久订阅创建的订阅服务器对象始终在每个事件调用后发布。
-
暂时性
-
对于暂时性订阅,可以使用 TransientSubscriptions 集合,其父对象是根目录对象。 暂时性订阅请求已存在的特定订阅服务器对象的事件。 暂时性订阅存储在 COM+ 目录中,但如果事件系统或作系统停止,则会删除订阅。 与永久性订阅不同,暂时性订阅绑定到特定对象,并且仅存储在事件系统中。 暂时性订阅比永久性订阅更高效,但必须管理其对象生命周期。 有关注册暂时性订阅的信息,请参阅 注册暂时性订阅。
-
每个用户
-
仅当订阅服务器登录到事件系统的计算机时,每个用户订阅才能传递事件。 当订阅服务器登录时,事件系统将启用 PerUser 标志设置为 TRUE,UserName 设置为登录用户的名称。 订阅服务器注销时,将禁用订阅。
仅当发布服务器和订阅服务器位于同一台计算机上时,每个用户订阅才有效。 登录和注销仅在发布者的计算机(而不是订阅服务器对象所在的计算机上)检测到。
每当创建、修改或删除事件类对象或订阅时,事件系统都会使用元事件来通知感兴趣的订阅者。 若要从事件系统接收元事件,应用程序必须创建驻留在事件系统计算机上的订阅,并指定触发接口 ID(IID_IEventObjectChange)。
相关主题