2011-09-28 74 views
1

調試一些.NET代碼,當我失去了一些東西基本在這裏:在.NET中,System.Threading.Thread.CurrentPrincipal沒有更新

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是線程執行上下文的屬性。也是它可以是靜態屬性的原因。不同的線程會有不同的主體,因此調試線程的主體不一樣。

您沒有真正的問題。

+0

Facinating理論。這似乎是真實的,作爲額外的獎勵。茶清! – Beska