订阅

订阅数据驻留在订阅 COM+ 目录中。 可以使用组件服务管理工具或采用编程方式使用 ICOMAdminCatalog::InstallComponent 接口创建订阅。

SubscriptionsForComponent 集合用于添加、删除或更改与订阅相关的信息。 SubscriptionsForComponent 集合是组件的子集合。 若要添加订阅,请获取组件的 SubscriptionsForComponent 集合,并使用 Add 方法将条目添加到集合。 若要设置订阅对象的各种属性,请使用 Value 属性。 若要保存更改,请对 SubscriptionsForComponent 集合对象使用 SaveChanges

还可以使用组件服务管理工具修改订阅属性的某些(而非全部)属性。 订阅指定以下信息:

  • 订阅服务器的标识和位置
  • 传递方法
  • 要传送的事件方法
  • 订阅服务器要从中接收事件的事件类组件的事件类对象和 PublisherID 属性

订阅独立于事件类对象存在。 可以将 Enabled 属性设置为 False 来禁用订阅。 COM+ 事件不会调用禁用的订阅。

三种类型的订阅如下所示:

永久

持久订阅驻留在 COM+ 目录中,独立于订阅服务器的生存期。 持久订阅会在系统重启后幸存下来。 通常,在订阅服务器计算机上安装应用程序时创建持久订阅,并在删除应用程序时将其删除。 创建持久订阅后,每次应将事件传送给订阅服务器时,COM+ 事件都会激活订阅服务器。

当发布服务器实例化并调用事件类对象时,该对象将查找 COM+ 目录中的所有持久订阅,并创建每个对象的新实例。 创建过程可以直接执行,也可以通过排队组件的名字对象执行。 按订阅的 SubscriberMoniker 属性指定订阅服务器对象。 始终会在每个事件调用后发布持久订阅创建的订阅服务器对象。

暂时

对于暂时性订阅,可以使用 TransientSubscriptions 集合,其父对象是根目录对象。 暂时性订阅为已经存在的特定订阅服务器对象请求事件。 暂时性订阅存储在 COM+ 目录中,但如果事件系统或操作系统停止,则会删除订阅。 与永久性订阅不同,暂时性订阅绑定到特定对象,并且仅存储在事件系统中。 暂时性订阅比永久性订阅更高效,但必须管理其对象生命周期。 有关注册暂时性订阅的信息,请参阅注册暂时性订阅

每用户

仅当订阅服务器登录到事件系统的计算机时,每用户订阅才能传送事件。 当订阅服务器登录时,事件系统将启用将 PerUser 标志设置为 TRUEUserName 设置为登录用户的名称的所有订阅。 订阅服务器注销时,将禁用订阅。

仅当发布服务器和订阅服务器位于同一台计算机上时,每用户订阅才有效。 仅在发布服务器的计算机上(而不是订阅服务器对象所在的计算机上)检测到登录和注销。

每当创建、修改或删除事件类对象或订阅时,事件系统都会使用元事件来通知感兴趣的订阅服务器。 若要从事件系统接收元事件,应用程序必须创建驻留在事件系统计算机上的订阅,并指定触发接口 ID (IID_IEventObjectChange)。

筛选 COM+ 中的事件

在 COM+ 中发布和传送事件

COM+ 事件类对象

将 COM+ 事件与 COM+ 排队组件配合使用