ここは私の問題です。私は、複数のヨーロッパ諸国に展開されているEコマースソリューションに取り組んでいます。私たちはアプリケーション内のすべての例外をSQL Serverに保持しており、DBには将来のDateTimeを持つレコードがあることがわかりました。コールバックメソッドの問題とCultureInfoおよびASP.Netの保守に関する問題HttpRuntime
cultureはweb.configで定義します(pt-PTなど)。期待される形式はDD-MM-YYYYです。
デバッグ後、これらの「将来の」レコードの問題は、私たちが使用するコールバックメソッドが原因であることが判明しました。たとえば、私たちのような、コールバックを使用して、当社のキャッシュアーキテクチャに - 私はのCultureInfo現在のスレッドをチェックすると
CacheItemRemovedCallback ReloadCallBack = new CacheItemRemovedCallback(OnRefreshRequest);
、これらのコールバックにそれがen-USでの代わりに、PT-PTであり、またのHttpContextがnullです。 Callbackで例外が発生した場合、例外マネージャはMM-DD-YYYYとして報告し、SQL Serverに間違って永続化されます。
残念ながら、例外マネージャーコードでは、DateTime.Nowを使用しています。これは、コールバックでない場合は問題ありません。このコードを他の分野で共有されているため、文化固有のものに変更することはできません。
なぜ、ASP.Netへのコールバックはコンテキストを維持しないのですか?このコールバックスレッドでそれを維持する方法はありますか?ここでベストプラクティスは何ですか?
ありがとうございました。
はいそれはToStringです。私は文化をデータベースに保存するために無視すべきだと同意しますが、これは私が対処しなければならないレガシーコードです。この問題は、コールバックがASP.Netコンテキストとアプリケーションカルチャを失うためです。これは何とか解決しようとするものです。 –
このコールバックが同じリクエストのコンテキストで発生するかどうかはわかりません。そうであれば、HttpContext.Current.Items ["CultureForRequest"]にカルチャを格納し、コールバックでそれを取り出すことができます。 –