0

我有一个运行一些 COM 对象的非单例 WCF(独立)服务。在非 WCF 环境中,使用 Thread.Start,这些 COM 对象在不同的​​线程中愉快地并行运行,利用所有 CPU 并在大约同一时间完成。

但是,当我尝试在特定的 WCF 服务中使用它们时,事情变得很奇怪。

当注册表中的ApartmentState设置为Both时,WCF 工作,但任务似乎是串行的,等待彼此的完成。CPU 使用率永远不会超过 1 个 CPU 的份额。就像它被迫在STA中运行一样。

当注册表中的ApartmentState设置为Free时,它​​会崩溃。

我只是不明白。这是某种管道阻碍吗?

我的 WCF 服务类具有以下属性:

[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any, InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Single)]

COM 对象是静态的/全局的。

4

1 回答 1

0

看来我可能有答案了。发帖以防其他人遇到类似的谜团。旧版本仅为 STA,Interop 被设置为嵌入。此外,更改了方法的原型。看起来,从嵌入式 Interop 中提取的部分与 COM 本身发生了冲突。

一旦我将设置更改为否并重新编译所有内容,它就变得正常了。

于 2014-04-15T03:56:38.580 回答