1

いくつかの.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の更新を拒否しているように見える理由についてアイデアを提供できますか?

4

1 に答える 1

2

これはデバッガーアーティファクトです。デバッグ式は、専用のデバッガスレッドで評価されます。CurrentPrincipalは、スレッドの実行コンテキストのプロパティです。また、静的プロパティである可能性がある理由。スレッドが異なればプリンシパルも異なるため、デバッガースレッドのプリンシパルは同じではありません。

本当の問題はありません。

于 2011-09-28T20:21:38.133 に答える