いくつかの COM オブジェクトを実行する非シングルトン WCF (スタンドアロン) サービスがあります。Thread.Start を使用する非 WCF 環境では、これらの COM オブジェクトは、すべての CPU を利用してほぼ同時に完了し、異なるスレッドで正常に並列実行されます。
しかし、特定の WCF サービスでそれらを使用しようとすると、奇妙なことが起こります。
レジストリ内でApartmentStateがBothに設定されている場合、WCF は機能しますが、タスクは順次実行され、互いの完了を待機しているように見えます。CPU 使用率が 1 CPU のシェアを超えることはありません。STAで強制的に実行するのと同じです。
レジストリでApartmentStateがFreeに設定されていると、クラッシュします。
私は単にそれを理解していません。これは何らかの配管が邪魔をしているのでしょうか?
私の WCF サービス クラスには、次の属性があります。
[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any、InstanceContextMode = InstanceContextMode.PerCall、ConcurrencyMode = ConcurrencyMode.Single)]
COM オブジェクトは静的/グローバルです。