2011-02-22 13 views
5

Here's un ejemplo de atributo setCulture la que el interior hace algo como esto:Ajuste de la cultura actual con las discusiones en ASP.NET MVC

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; 
    } 

Me preguntaba cómo afecta esto a un sitio con múltiples usuarios conectados y cada uno establecer su propia cultura? ¿Cuál es el alcance de un hilo aquí con respecto al proceso de trabajo de IIS (w3wp) en el que se está ejecutando el sitio?

Respuesta

5

es exactamente lo mismo que con Asp.Net normal. El hilo se usa para esta solicitud de principio a fin, y luego se desecha de manera efectiva (si quieres ser pedante, la hebra de la plataforma subyacente se queda por un tiempo).

Así que varios usuarios no se verán afectados, ya que cada uno obtiene su propio hilo concurrente. Estoy haciendo exactamente lo mismo en algunos sitios (incluido uno que recibe regularmente decenas de miles de visitas únicas en el espacio de un par de horas) y siempre está bien.

+1

El hilo está en un grupo de subprocesos, por lo que en realidad es reutilizado en lugar de tirar. Siempre y cuando siempre establezcas la cultura en cada solicitud, p. mediante el uso de un filtro global, sin embargo será igual para los usuarios. – zcrar70

0

No estoy de acuerdo con la respuesta basada en los artículos a continuación. Cambiar la cultura del subproceso actual supone que existe un ciclo de vida similar entre subprocesos y solicitudes que no parece ser el caso, al menos no para todos los escenarios. Entonces, puede o no tener un problema para hacerlo. Por favor revisa los artículos a continuación.

asp.net mvc3 request thread affinity

http://forum.springframework.net/showthread.php?572-CallContext-vs.-ThreadStatic-vs.-HttpContext&highlight=LogicalThreadContext

http://blogs.msdn.com/b/tmarq/archive/2007/07/21/asp-net-thread-usage-on-iis-7-0-and-6-0.aspx

http://www.hanselman.com/blog/ATaleOfTwoTechniquesTheThreadStaticAttributeAndSystemWebHttpContextCurrentItems.aspx

Cuestiones relacionadas