在ASP.NET MVC中使用线程设置当前区域性

mar*_*are 6 iis asp.net-mvc iis-7 multithreading thread-safety

这是一个SetCulture属性的例子,里面做了这样的事情:

    public void OnActionExecuting(ActionExecutingContext
        filterContext)
    {
        string cultureCode = SetCurrentLanguage(filterContext);

        if (string.IsNullOrEmpty(cultureCode)) return;

        HttpContext.Current.Response.Cookies.Add(
            new HttpCookie("Culture", cultureCode)
            {
                HttpOnly = true,
                Expires = DateTime.Now.AddYears(100)
            }
        );

        filterContext.HttpContext.Session["Culture"] = cultureCode;

        CultureInfo culture = new CultureInfo(cultureCode);
        System.Threading.Thread.CurrentThread.CurrentCulture =
            culture;
        System.Threading.Thread.CurrentThread.CurrentUICulture =
            culture;
    }
Run Code Online (Sandbox Code Playgroud)

我想知道这对多个用户登录的网站有何影响,每个用户都设置了自己的文化?什么是范围在这里线程与问候到IIS工作进程(W3WP),该网站在运行?

And*_*tan 5

它与普通的Asp.Net完全相同.该线程用于此请求从开始到结束,然后有效地扔掉了(如果你想成为迂腐底层平台线程坚持了一段时间).

因此,多个用户不会受到影响 - 因为每个用户都有自己的并发线程 - 我在几个站点上做了完全相同的事情(包括在几个小时内经常被数万个独立访问者攻击的站点)它总是很好.