2011-09-28 77 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