COM +库应用程序的目的是什么?

sha*_*oth 6 windows com interop com+ com-interop

创建COM +应用程序后,向导将提供在库和服务器应用程序之间进行选择。

服务器应用程序是在单独的过程中激活的,可用于廉价地互操作具有32位进程内COM组件的64位使用者。

直接在调用者进程中激活的库应用程序有什么用?为什么要使用它们而不是普通的老式In-proc COM服务器?

Q B*_*ler 3

有几个:

  1. 性能 - 它更快一点,因为您不必执行消息自动化(编组和解组)

  2. 隔离 - 如果许多不同的应用程序正在使用该库,那么每个应用程序都将拥有自己的副本。在处理 MTA(多线程单元)和 STA(单线程单元模型)之间的差异时,这一点最为重要

IN-PROC 服务器(实际上是一个进程外、调用者进程之外的服务器)由所有不同的调用者共享(这是获得廉价 IPC/RPC 的好方法)

好的,我正在编辑更多的定义和更多的参考:

  1. 上下文实际上是围绕对象使用的所有状态。
  2. 因果关系实际上是一个类似线程的概念,指示对象在上下文中的使用。(“因果关系是 COM 方法调用的分布式链,它跨越任意数量的进程中的任意数量的上下文” - 来自 ISBN:0-201-61594-0)

Tim Ewald 的优秀著作“Transactional COM+”第 2 章约 30 页讨论了这些概念 ISBN:0-201-61594-0

因此,直接引用第 2 章的摘要:“对象可以使用对象上下文与其上下文进行交互,并使用调用上下文与给定的因果关系进行交互。这两个对象提供了与 COM+ 运行时服务交互的接口。这种编码风格,‘ “深入上下文”使得 COM+ 开发与经典 COM 开发截然不同。”

最后,第 2 章有一个讨论“为什么是库应用程序?”(这与你的问题不同,为什么不只是普通的旧 COM?)他的论点主要表明与使用 COM 对象相同的原因,1.每个应用程序都有自己的实例。2. 加载到非 DLLhost.exe 进程中。3. 开销少得多。4. 常见对象的简单部署。

因此,最重要的是,如果您不是分布式的,并且本质上不是事务性的,那么使用 COM+ 相对于 COM 可能没有真正的优势。但是,如果您编写 COM+ 应用程序并将其部署为 LIBRARY 应用程序,那么它的行为会更像 COM 组件。

希望有帮助。