0

这是我的问题。我正在研究部署到多个欧洲国家的电子商务解决方案。我们将应用程序中的所有异常都保存到 SQL Server 中,我发现数据库中的某些记录在未来具有 DateTime!

我们在 web.config 中定义文化,例如 pt-PT,预期格式为 DD-MM-YYYY。

调试后,我发现数据库中这些“未来”记录的问题是由于我们使用的回调方法。例如,在我们的缓存架构中,我们使用回调,因此 -

CacheItemRemovedCallback ReloadCallBack = new CacheItemRemovedCallback(OnRefreshRequest);

当我检查当前线程 CultureInfo 时,在这些回调上它是 en-US 而不是 pt-PT 并且 HttpContext 为空。如果回调发生异常,我们的异常管理器会将其报告为 MM-DD-YYYY,因此它会错误地保存到 SQL Server。

不幸的是,在异常管理器代码中,我们使用了 DateTime.Now,如果它不是回调就可以了。我无法将此代码更改为特定于文化,因为它在其他垂直领域共享。

那么,为什么不回调到 ASP.Net 维护上下文?有没有办法在这个回调线程上维护它?这里有哪些最佳实践?

谢谢。

4

2 回答 2

0

DateTime.Now 不依赖于文化。您是否将其保存为字符串?ToString确实取决于文化。

事实上,作为一般规则,尽量以不依赖于文化的方式将事物存储在数据库中。这在 Web 应用程序中尤其重要,其中每个请求的文化可能与下一个不同。为了能够“比较苹果和苹果”,你需要忽略文化。

于 2009-07-01T17:02:29.447 回答
0

您应该在日志管理中将日期时间(推荐 UTC)与错误描述的其余部分分开,并存储与日志条目关联的文化。然后你可以独立地用这 3 个部分重新组合信息。

缓存回调来自线程池线程,在您的情况下,该线程始终具有 en-US 并且没有 HttpContext。您应该能够通过将删除的缓存项与您的回调逻辑相关联来检索文化。

于 2009-07-28T22:32:45.470 回答