同步属性值

同步属性是一个声明性属性,用于指定激活组件时希望组件拥有的同步类型。 包含同步属性时,COM+ 代表你处理同步的详细信息;您不必进行任何其他调用。

根据其要求,对象可以共享其调用方同步、需要新同步或不同步作。

COM+ 提供以下同步属性值:

  • 禁用。 禁用同步属性时,COM+ 会忽略组件在确定对象的上下文时的同步要求。 因此,对象可以或可能不会共享其调用方上下文(和同步)。

    通常,当知道组件永远不会访问资源管理器时,应使用此属性值。 将 COM 组件迁移到 COM+时,必须禁用同步属性,以保持与未配置的 COM 组件相同的行为。 未配置组件是 COM+ 应用程序中尚未安装的 COM 组件。

  • 不支持。 无论其调用方的状态如何,具有此值的对象都不会参与同步。 此设置仅适用于非事务性的组件,并且不使用 COM+ 实时(JIT)激活 服务。

  • 支持。 如果存在,具有此值的对象将参与同步。 如果希望对象在其调用方同步中共享,但不需要自行同步,则声明此值。

    将同步属性设置为“支持”的一个好原因是,在系统资源方面,此设置的成本可能更低。 但是,由于需要保护组件免受并发调用的困扰,编写组件会更加困难。 将同步属性设置为“支持”的含义在于,在某些情况下,可能会以未同步的方式创建对象的实例。 如果组件的线程模型为“免费”或“两者”,则必须使用某种类型的锁定机制来保护实例数据。 如果线程模型是单元(STA),则无需保护实例数据。

  • 必填。 设置此属性时,COM+ 可确保从组件创建的所有对象都将同步。 实际上,每当 COM+ 创建组件的实例时,它确保一次只有一个线程通过此实例。

    当 COM+ 激活对象时,它会查看其调用者的同步状态。 如果调用方已同步,COM+ 会流调用方同步边界以包含新对象。 否则,COM+ 将开始同步。

  • 需要新。 具有此值的对象必须参与新的同步,其中 COM+ 代表调用中涉及的所有组件管理上下文和单元。 COM+ 会自动启动与调用方同步不同的新同步。

    将同步属性设置为“需要新建”的一个好原因是,此设置允许你更有效地对组件的实例进行外部调用。 但是,它还会在对象与在系统资源方面创建它更昂贵的对象之间进行调用。

    例如,假设对象及其创建者对象共享同一同步边界的情况。 如果客户端 A 调用创建者对象,而客户端 B 调用对象,则第二次调用必须等到第一次调用完成。 如果设置了“需要新建”,则会在单独的同步边界中创建对象。 在这种情况下,可以同时处理来自其他对象的调用。 但是,从创建者对象到对象的调用需要更多的系统资源,因为它们必须跨越同步边界。

设置同步属性

同步依赖项