2011-02-10 8 views
4

(this article의 예제를 기반으로) 현지화를 위해 HttpModule을 사용하는 것을 고려하고 있습니다.하지만 궁금합니다. 안전한가요?현지화에 HttpModule을 사용하는 것이 안전합니까?

여기 참조 용 코드입니다 :

public class CookieLocalizationModule : IHttpModule 
{ 
    public void Dispose() 
    { 
    } 

    public void Init(HttpApplication context) 
    { 
     context.BeginRequest += new EventHandler(context_BeginRequest); 
    } 

    void context_BeginRequest(object sender, EventArgs e) 
    { 
     // eat the cookie (if any) and set the culture 
     if (HttpContext.Current.Request.Cookies["lang"] != null) 
     { 
      HttpCookie cookie = HttpContext.Current.Request.Cookies["lang"]; 
      string lang = cookie.Value; 
      var culture = new System.Globalization.CultureInfo(lang); 
      // is it safe to do this in all situations? 
      Thread.CurrentThread.CurrentCulture = culture; 
      Thread.CurrentThread.CurrentUICulture = culture; 
     } 
    } 
} 

내가 여러 스레드가 잠재적으로 웹 요청을 서비스 할 수있는 인상이었다. 이처럼 HttpModule에서 Current/Current UI Cultures를 설정하는 것이 안전합니까? 그리고 서비스 요청과 관련하여 얼마나 많은 스레드가 관계없이 웹 요청의 수명을 존중합니까?

업데이트 : 지금은 거의 년 동안 생산이 방법을 사용하고있다, 그래서 나는 확실히 그것을 현지화에 대한 HttpModule의를 사용하여 완벽하게 안전하다는 것을 확인할 수 있습니다

.

답변

2

네, 그래야 정상입니다.

메신저 분명히 다른 스레드를 시작하지 않는 한 정말로 단 하나의 스레드 만 요청을 처리 할 것이고,이 경우 문화권 (및 다른 것들)이 다른 스레드에 복사됩니다.

+0

"문화권 (및 다른 것들)이 다른 스레드로 복사되었습니다"라는 출처를 인용 할 수 있습니까? – DanP

+0

C# 3을 통해 Jeffrey Richters CLR에서 읽었습니다. MO에서 나와 함께하지 않으므로 100 % 확인합니다. 스레드가 새 스레드를 생성하면 스레드는 해당 스레드의 컨텍스트를 새 스레드로 복사합니다. 여기에는 문화가 포함됩니다. 기존 스레드를 호출하는 경우 스레드 풀 스레드를 사용하는 경우 스레드가 다를 수 있습니다. – TimC

관련 문제