【问题标题】:COM Object Pooling and .NET Web ServiceCOM 对象池和 .NET Web 服务
【发布时间】:2009-05-12 22:36:04
【问题描述】:

我有一个需要从 .NET Web 服务访问的 COM 对象。

我知道整个 STA/MTA 的事情 - 所以我的 COM 对象将被转换为 MTA 并且没有全局状态(虽然它本身不是多线程的)。

如果我将它设置为 COM+ 服务器,并指定一个对象池,这是否意味着对于每个 Web 服务线程,它将使用不同的 COM 对象实例?不排队?

谢谢

【问题讨论】:

    标签: .net web-services com+ object-pooling


    【解决方案1】:

    这取决于几件事。

    如果您对池中的对象数量设置了上限,并且在 Web 服务客户端中保持对象引用处于活动状态,并且您不使用 JIT 或在方法调用中不设置 Done 标志,一旦达到池限制,他们就会排队。

    如果您确实使用 JIT 并通过调用 SetComplete 或使用方法上的 AutoComplete 属性设置 Done 标志,则 COM+ 组件将被停用并在方法返回时放回池中。除非并发执行的方法数达到最大池限制,否则新方法调用将永远不需要等待。

    【讨论】:

    • 我不会让 COM 对象保持活动状态或其他任何东西,这将是一种简单的“即发即弃”类型的调用。我只需要向 COM 对象询问一些东西,一旦我得到它,我就可以关闭与它的连接。当您说 AutoComplete 属性时 - 这是在 .NET 方面吗?
    • 不,[AutoComplete(true)] 位于 COM+ 端。您可以断开与 COM+ 的连接,这也会导致停用,但如果您想要速度,请保持与 COM+ 对象的连接并继续调用其方法。
    • 好的,每个 Web 服务线程每次都会调用 COM+ 对象一次。根据您的经验,性能会很糟糕吗?从 .NET 调用 COM+ 是否有相当大的开销?
    • 如果您每次都创建 COM+ 客户端对象,它必须与 COM+ 服务器建立连接,这会带来一些延迟,尤其是通过网络。如果它们在同一台机器上,它可能不会太糟糕。此外,它的编程更简单,如果服务器出现故障,您不必担心重新连接。试试看。如果速度太慢,您可以稍后再换一种方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 2010-12-13
    • 2021-09-26
    • 2010-09-15
    • 2012-06-01
    • 1970-01-01
    相关资源
    最近更新 更多