从 WebApi 调用 STA COM 对象

Calling STA COM object from WebApi

从 MTA 线程上下文(.Net WebApi 请求)调用 STA 远程应用程序类型库的 C# Runtime Callable Wrapper 是否安全(从线程模型和单元的角度来看)?

我应该将服务器 STA 应用程序更改为 MTA 还是 RCW 将在幕后处理这些机制?

RCW 是 COM 代理的 .NET 代理。无论您在 .NET 应用程序中位于哪个公寓,RCW 都会为您处理编组。

并且由于对象是远程的,您无需担心公寓是否兼容,通信跨进程。如果您要使用本地语言和环境,例如 C++,您只需要担心不要跨单元共享 COM 代理,或者换句话说,在每个单元中正确编组代理引用。

如果对象在进程中,您将获得共享同一个单元的性能,但在进程之间,封送处理和线程调度延迟将是最大的开销。

但是,您应该考虑其他应用程序使用的公寓。使用 STA 的应用程序将是单线程的,因此这将成为您的 ASP.NET 应用程序的瓶颈。如果它使用 MTA,也许不会,如果它不同步所有调用或者关键部分很快。

对于应用程序,您通常无法控制所使用的公寓。你会如何改变它的公寓?这是一个 COM+ 组件吗?这是你的代码吗?准备好换公寓了吗?