6

サードパーティ システムの初期化に使用するスレッドは、それを終了するために使用するスレッドと同じでなければならないという、非常に厄介な相互運用の問題があります。これを行わないと、デッドロックが発生します。IIS でホストされている WCF サービスから相互運用を実行しています。現在、このクリーンアップは処分で行われており、通常は非常にうまく機能します。残念ながら、重い負荷がかかると、IIS は無作法なアンロードを実行するため、dispose を呼び出すことはできません。シャットダウン ロジックを重要なファイナライザーに移動することはできますが、初期化スレッドにアクセスできないため、それは役に立ちません。現時点では、AppDomain が破損した状態にある可能性が高いことを CLR に通知することが唯一の手段のようです。ただし、それを行う方法がわかりません(または可能かどうかさえわかりません)。これはクラスレベルでの契約の有用性かもしれませんが、そうではないことを認めます.

編集: あるいは、これはファイナライザーのスレッド アフィニティの問題と見なすこともできます。誰かがそれに対する賢い解決策を持っているなら、私はすべて耳にします:)

4

1 に答える 1

1

可能であれば、ネイティブの依存関係に依存するコードをスタンドアロンの Windows サービス アプリケーションに分割してみてください。WCF/IIS でうまく動作しない場合は、競合するのではなく、競合を回避する必要があります。

于 2012-03-13T05:04:16.087 に答える