ThreadingModel Free崩溃了WCF服务

时间:2014-04-14 02:05:55

标签: wcf com mta

我有一个运行某些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对象是静态/全局的。

1 个答案:

答案 0 :(得分:0)

看起来我可能有一个答案。发布以防其他人遇到类似的谜。旧版本仅为STA,Interop设置为嵌入式。另外,改变了方法的原型。看起来,从嵌入式Interop中取出的部件与COM本身发生了冲突。

将设置更改为“否”并重新编译后,一切正常。

相关问题