我有一个运行某些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对象是静态/全局的。
答案 0 :(得分:0)
看起来我可能有一个答案。发布以防其他人遇到类似的谜。旧版本仅为STA,Interop设置为嵌入式。另外,改变了方法的原型。看起来,从嵌入式Interop中取出的部件与COM本身发生了冲突。
将设置更改为“否”并重新编译后,一切正常。