そのため、集中ロギング用の相関 ID を持つ共通の状態コンテキスト シングルトンを使用しています。目的は、プロセス全体を通して ID を追跡し、さまざまな層を関連付けることです。
状態コンテキストには、複数の dll と複数のユーザーがアクセスします。
マルチスレッドが登場すると、問題が発生します。
- プロセス 1 がユーザー 1 によって起動されました
- 相関 ID が {1} に設定されます
- DLL A は状態コンテキストにアクセスし、相関 ID {1} を取得します
- プロセス 1 が完了する前に、プロセス 2 がユーザー 2 によって起動されました
- 相関 ID が {2} に設定されます
- {1} のはずの相関 ID {2} を持つ最初のプロセス アクセス状態コンテキストからの DLL B
この問題をどのように解決しますか?
ロックが私たちの解決策であるとは思いませんか? 他のアイデアはありますか?
ここに図があります
(S)->[ CorrelationID {get;set} ]
^ ^ ^
U1 <--> | | | O
U2 <--> [DLLA] <--> [DLLB] <--> [DLLC] <--> | |
U3 <-->
{Web} <--> {Domain} <-> {Data Access} <--> {DB}
(<-- Process / Thread --> )
{} = 可能な DLL の例
各ユーザーのプロセスには 1 つの相関 ID が必要です