0

これが私の問題です。私はヨーロッパの複数の国に展開されているEコマースソリューションに取り組んでいます。アプリケーション内のすべての例外をSQLServerに永続化し、DBに将来DateTimeを持つレコードがあることがわかりました。

web.configでカルチャを定義します(例:pt-PT)。予想される形式はDD-MM-YYYYです。

デバッグ後、DB内のこれらの「将来の」レコードの問題は、使用するコールバックメソッドが原因であることがわかりました。たとえば、キャッシングアーキテクチャでは、コールバックを使用します。

CacheItemRemovedCallback ReloadCallBack = new CacheItemRemovedCallback(OnRefreshRequest);

現在のスレッドCultureInfoを確認すると、これらのコールバックでは、pt-PTではなくen-USであり、HttpContextもnullです。コールバックで例外が発生した場合、例外マネージャーはそれをMM-DD-YYYYとして報告するため、SQLServerに誤って保持されます。

残念ながら、例外マネージャーのコードでは、DateTime.Nowを使用しています。これは、コールバックでない場合は問題ありません。他の業種で共有されているため、このコードをカルチャ固有に変更することはできません。

では、なぜASP.Netへのコールバックはコンテキストを維持しないのでしょうか。このコールバックスレッドでそれを維持する方法はありますか?ここでのベストプラクティスは何ですか?

ありがとう。

4

2 に答える 2

0

ログ管理では、DateTime (UTC を推奨) を残りのエラーの説明から分離し、ログ エントリに関連付けられたカルチャも保存する必要があります。次に、これらの 3 つの部分を個別に使用して情報を再構築できます。

キャッシュ コールバックは、あなたの場合は常に en-US を持ち、HttpContext がないスレッドプール スレッドで発生します。削除されたキャッシュ アイテムをコールバック ロジックに関連付けることで、カルチャを取得できるはずです。

于 2009-07-28T22:32:45.470 に答える