これが私の問題です。私はヨーロッパの複数の国に展開されている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へのコールバックはコンテキストを維持しないのでしょうか。このコールバックスレッドでそれを維持する方法はありますか?ここでのベストプラクティスは何ですか?
ありがとう。