8

私は WCF サービスを持っており、データベースへの各呼び出しをログに記録します。後で例外が発生した場合も、別のデータベースに記録されます。

何が例外の原因であるかを確認できるように、これらの両方のログを結び付ける方法が必要でした。これを行うには、呼び出しごとに取得できる何らかの一意の ID が必要でした。

全体が単一のスレッドで実行されているため、たとえば、スレッド名を GUID に設定できます。System.Threading.Thread.CurrentThread.Name = Guid.NewGuid().ToString();しかし、これは少しハックです。

ネットを検索して発見しましSystem.Threading.Thread.CurrentContext.SetProperty()たが、そのコンテキストが正確に何であるか疑問に思っています。スレッドの期間中にプロパティを保存するように設計されていますか? スレッドごとに一意ですか?

5つの同時WCF呼び出しがある場合、いわば「呼び出しごと」ではない場合、コンテキストで起こっていることの間に競合が発生することは望ましくありません。

誰かが明確にすることができますか?

4

1 に答える 1

7

Microsoft は内部使用のみだと言っているので、私はそのプロパティを使用しません。

"This API supports the .NET Framework infrastructure and is not intended to be used directly from your code."

Thread Local Storageただし、 を使用して同じ種類のことを実行できるはずです。そのリンクは、スレッドの文字列プロパティを設定する方法を示す例を示しています。

http://www.c-sharpcorner.com/UploadFile/1d42da/working-with-thread-local-storagetls-in-C-Sharp/も参照してください。

于 2013-06-03T13:41:58.263 に答える