System.Threading.Thread.CurrentPrincipal 是不是在所有用户之间共享? [关闭]

Posted

技术标签:

【中文标题】System.Threading.Thread.CurrentPrincipal 是不是在所有用户之间共享? [关闭]【英文标题】:is System.Threading.Thread.CurrentPrincipal shared between all users? [closed]System.Threading.Thread.CurrentPrincipal 是否在所有用户之间共享? [关闭] 【发布时间】:2018-05-31 13:41:53 【问题描述】:

我打算使用 currentprincipal 并且我搜索该属性是 static ,所以它必须是共享的,实际上我需要它是不同的而不是共享的。当我编写一些代码时,我看到 2 个用户登录应用程序后 currentprincipal 不同,对吗,我可以确定属性不同吗?实际上我的用户登录到应用程序并通过 WCF 调用我的函数!如果我的解释不够,请让我澄清一下,谢谢

【问题讨论】:

正如@Backs 所说:简短的回答是“不”;在 WCF 中,主体是针对每个请求的,甚至还有一个注入点,您可以使用它来基于每个请求添加自己的主体实现。 【参考方案1】:

System.Threading.Thread.CurrentPrincipal 为当前线程返回 IPrincipal。您的用户是否在某一时刻使用相同的线程?我想,没有。

【讨论】:

谢谢。对,似乎 wcf 为每个请求打开一个新线程,但我认为当前主体是从应用程序的主线程继承的,对吗?当我们编码时,我们看到 3 个不同的属性,当前线程、当前主体和当前上下文。所以我认为当前主体与当前线程无关。 !! MSDN:“获取或设置线程的当前主体”。我知道它返回线程的当前主体,如果我们假设线程是应用程序的主线程,那么它必须是共享的!但是我在编写代码时进行了迭代,我看到了不同的主体,看来您的答案是正确的! @Hessam 你在谈论什么主线?在桌面应用程序中?您的用户目前是否使用一台 PC 和一个应用程序?不,WCF 线程每个请求使用一个线程,因此在处理 WCF 之前,请根据配置设置主体和其他设置 用户从 webapi 连接到 wcf,我的 wcf 托管在控制台应用程序中。所以将控制台应用程序线程视为主线程。当用户调用 wcf 的方法时,system.thread.curretnprincipal 是否与 MAIN.principal 不同?如果是,那么问题就解决了!!!但如果校长是相同的,它会给我带来问题! @Hessam 如果您打开任何类型的身份验证,它将有所不同:msdn.microsoft.com/en-us/library/ff406125.aspx

以上是关于System.Threading.Thread.CurrentPrincipal 是不是在所有用户之间共享? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章