0

いくつかの 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 オブジェクトは静的/グローバルです。

4

1 に答える 1

0

答えがありそうです。他の誰かが同様のミステリーに出くわした場合に備えて投稿します。古いバージョンは STA のみで、Interop は組み込みに設定されていました。さらに、メソッドのプロトタイプが変更されました。どうやら、埋め込まれた Interop から取られたパーツが COM 自体と衝突したようです。

設定をNoにして再コンパイルしたら正常になりました。

于 2014-04-15T03:56:38.580 に答える