0

複数の(インストールされている部品によって異なる)アセンブリモジュールを実行するサービスがあります。同じアセンブリの複数のインスタンスを実行し、異なるデータベースに接続できるため、各モジュールは独自のAppDomainで実行されます。

最近、既存の個別のサービスを置き換えるために、新しいモジュールを追加しました。このモジュールはマルチスレッドであり、これもマルチスレッドである社内のレガシーロギングライブラリを使用します。新しいモジュールは、既存のアンマネージC ++コードのac#ラッパーです。

私の問題は、ロギングコードが書き込み先のファイル名や場所などのデータをAppDomainに保存することです。これはモジュールのメインスレッドでは正常に機能しますが、新しいスレッドが作成されると、親AppDomainの下に作成されます。サービス実行可能ファイル自体。親AppDomainには、ロギングコードが探しているデータが含まれていないため、データを書き出すことができません。

古いWin32CreateThread()呼び出しを使用して作成されたスレッドは、現在のAppDomainでは作成されないため、.Netスレッドを使用する必要があるという記事を見つけました。それが私のコードの場合だったので、モジュールコードを.Netスレッドを使用するように変更しましたが、それでも同じ結果が得られます。

また、ロギングクラスをシングルトンとして実行しようとしましたが、生成されたスレッドは、親AppDomainからシングルトンをプルしようとします。もちろん、正しいデータはありません。

私は本当にこれを機能させる必要があり、壁にぶつかりました。

何か案は???

4

0 に答える 0