2009-03-30 3 views
1

이 질문의 배경은 (정적) WebMethod에서 일부 사용자 세션 데이터를 사용해야한다는 것입니다. 내가 좋아하는 데이터를 참조하는 정적 속성을 만들었습니다 :ASP.NET 페이지의 정적 데이터 - threadsafe?

private static UserWebSession UserWebSession 
{ 
    get 
    { 
     return (UserWebSession)HttpContext.Current.Session["UserWebSession"]; 
    } 
} 

다음이 내 페이지의 정적 WebMethod에서 호출 할 수 있습니다.

제 질문은이 기술이 스레드 안전합니까? 또는이 속성의 값은 새로운 페이지 요청마다 업데이트됩니다. 즉, 가장 최근에 페이지를 요청한 사용자의 UserWebSession을 반환합니다.

답변

3

괜찮습니다. HttpContext.Current은 이런 종류의 작업을 위해 정확하게 설계되었습니다. 이전 사용자의 세션을 가져올 수 없습니다.

스레드에 따라 달라 지므로 추가 배경 스레드를 시작하면 현재 컨텍스트를 볼 수 없습니다.

이 호출은 잘못된 컨텍스트를 얻지 못하는 측면에서 안전하지만 정상적인 동시성 경고는 실제로 을 수행 할 때 적용되며 컨텍스트와 함께이됩니다.

+0

찬란하고 감사합니다. 존. 주의해야 할 점. – MalcomTucker

0

페이지 메서드가 세션 상태에 액세스 할 수 있는지 알 수 없습니다. 가능하면 괜찮을 수도 있습니다. 세션 상태에 대한 액세스가 직렬화되므로 주어진 세션에 대해 한 번에 하나의 요청 만 도착할 수 있습니다.