2011-09-28 1 views
1

를 업데이트되지 않습니다, System.Threading.Thread.CurrentPrincipal 일부 .NET 코드를 디버깅 할 때 내가 여기에 초등학교 뭔가를 누락

public static void CreateServiceSessionStore() 
    { 
     ServiceSessionStore serviceSessionStore = new ServiceSessionStore(); 
     serviceSessionStore.SetIdentity(System.Threading.Thread.CurrentPrincipal.Identity); 
     System.Threading.Thread.CurrentPrincipal = serviceSessionStore; 
     // Here, CurrentPrincipal still isn't a serviceSessionStore! 
    } 

를이 코드에서, 모든 것을 즐겁게 함께 마시기 것으로 보인다. 그러나 ... 디버깅 할 때 마지막 줄 바로 전에 System.Threading.Thread.CurrentPrincipal을보고 있습니다. 이 값은 WebSessionStore 객체입니다.이 객체는 내가 기대하는 바이며 마지막 줄에서 ServiceSessionStore 객체로 변경해야한다고 생각합니다. 그러나 그렇지 않습니다. serviceSessionStore를 살펴볼 수는 있지만 ServiceSessionStore 객체를 가지고 있습니다. 그러나 라인 실행 후에는 CurrentPrincipal에 WebSessionStore 객체가 여전히 포함되어 있습니다. 오류가 발생하지 않습니다.

이제 이러한 개체가 실제로하는 것 이외에도 누군가가 CurrentPrincipal을 업데이트하는 것을 거부하는 이유에 대한 아이디어를 제공 할 수 있습니까?

+0

권한 (SecurityPermission)이 부족하다고 생각됩니다. 나는 던져진 예외가 보이지 않는 이유를 모르겠습니다. 흥미있는 – sehe

+0

@sehe : 조사 할만한 가치가있는. – Beska

답변

2

이것은 디버거 아티팩트입니다. 디버그 표현식은 전용 디버거 스레드에서 평가됩니다. CurrentPrincipal은 스레드의 실행 컨텍스트의 속성입니다. 또한 정적 속성이 될 수있는 이유. 다른 thread는 다른 주체를 가져, 디버거 thread의 주체는 동일하지 않습니다.

실제 문제는 없습니다.

+0

Facinating 이론. 추가 보너스로 사실 인 것 같습니다. 차칭! – Beska

관련 문제