C# 更改web服务中的CurrentUICulture会影响所有用户吗?

C# 更改web服务中的CurrentUICulture会影响所有用户吗?,c#,asp.net,web-services,cultureinfo,C#,Asp.net,Web Services,Cultureinfo,我有一个使用一组web服务的web应用程序。当在web服务上捕获异常并将其发送回客户端时,我需要以web应用程序上当前设置的语言显示该消息 我的第一个想法是发送一个包含web应用程序当前UICulture的SoapHeader,并按如下方式更改区域性: CultureInfo culture; culture = CultureInfo.CreateSpecificCulture(CultureHeader.currentCulture); System.Threading.Thread.Cur

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

我的第一个想法是发送一个包含web应用程序当前UICulture的SoapHeader,并按如下方式更改区域性:

CultureInfo culture;
culture = CultureInfo.CreateSpecificCulture(CultureHeader.currentCulture);
System.Threading.Thread.CurrentThread.CurrentCulture = culture;
System.Threading.Thread.CurrentThread.CurrentUICulture = culture;
我现在想知道这是否会影响web服务的所有用户,还是只影响当前的请求

我现在想知道这是否会影响web服务的所有用户,还是只影响当前的请求

它将影响当前线程服务的所有请求(直到其他内容更改属性)。但是,它不会影响由其他线程提供服务的请求

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

当然,如果您使用ASP.NET的异步支持,允许不同的池线程启动服务请求并启动异步操作,但是,当这些异步操作完成时,线程池被再次使用,有时会导致另一个线程完成该操作,如果一个线程具有一个区域性集,而另一个线程具有不同的区域性集,那么事情可能会变得有趣

摘要:好的做法是永远不要依赖于当前线程上设置的隐式区域设置:所有与区域性相关的操作(包括对
ToString
的所有直接或间接调用)都应显式传递正确的区域性


更好的方法是明确决定并使用特定格式(例如ISO-8601中的所有日期和时间)来处理文化差异造成的每种数据类型,因此客户不需要猜测正确的解释(例如,有些人认为今天不是2013年11月1日).

我原以为,如果需要,终端用户总是可以在另一端将文化转换为他们自己的衍生产品。