【问题标题】:Will changing CurrentUICulture in a web service affect all users?更改 Web 服务中的 CurrentUICulture 会影响所有用户吗?
【发布时间】:2013-11-01 08:48:20
【问题描述】:

我有一个使用一组 Web 服务的 Web 应用程序。当在 Web 服务上捕获异常并将其发送回客户端时,我需要以 Web 应用上当前设置的语言显示该消息。

我的第一个想法是发送一个包含 Web 应用程序 CurrentUICulture 的 SoapHeader 并像这样更改文化:

CultureInfo culture;
culture = CultureInfo.CreateSpecificCulture(CultureHeader.currentCulture);
System.Threading.Thread.CurrentThread.CurrentCulture = culture;
System.Threading.Thread.CurrentThread.CurrentUICulture = culture;

我现在想知道这是否会影响 Web 服务的所有用户或仅影响当前请求?

【问题讨论】:

  • 我原以为最终用户总是可以在另一端必要时将文化转换为他们自己的派生词。

标签: c# asp.net web-services cultureinfo


【解决方案1】:

我现在想知道这是否会影响 Web 服务的所有用户或仅影响当前请求?

它将影响当前线程服务的所有请求(直到其他东西改变了属性)。但是它不会影响其他线程服务的请求。

请记住,ASP.NET 使用线程池来允许同时处理多个请求,但是在调试时,您通常一次只处理一个请求,因此这不是很明显。

当然,如果您使用 ASP.NET 的异步支持,允许不同的池线程启动服务请求并启动异步操作,但是当这些异步操作完成时,有时会再次使用线程池,从而导致不同的线程完成如果一个线程有一个文化集而另一个线程有不同的文化集,那么操作就会变得有趣。

总结:好的做法是永远不要依赖当前线程上设置的隐式语言环境:所有与文化相关的操作(包括对ToString 的所有直接或间接调用)都应明确传递正确的文化。

更好的是明确地决定和使用特定格式(例如,ISO-8601 中的所有日期和时间),用于文化产生影响的每种数据类型,因此客户无需处理猜测正确解释(例如,有些人认为今天不是 2013 年 1 月 11 日)。

【讨论】:

    猜你喜欢
    • 2014-09-15
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    • 2016-01-18
    相关资源
    最近更新 更多