0

我们正在使用UserNamePasswordValidator和 将IAuthorizationPolicy自定义角色数据加载到IPrincipal对象中,以在我们的服务器端进行身份验证和一些业务级别的权限。

因此,我们Thread.CurrentPrincipal在我们的服务操作内部使用来测试权限等。冒着比我应该获得更多技术的风险,这是类的一个static属性,Thread这意味着它具有实例范围 全局scoppe(duh,感谢 Thilak)。我InstanceContextMode将来是否应该出于性能原因将我的更改为Single,这个方案肯定会失败?我知道这Single需要您编写线程安全的代码,因此它本身不仅仅是配置更改。

在我需要关注这个问题之前,您是否还可以分享任何指向权威文本的链接,具体说明 WCF 应该能够处理什么样的实例负载?

4

1 回答 1

0

这是一个链接

http://msdn.microsoft.com/en-us/magazine/cc948343.aspx

这是我的 2 美分:

Thread.CurrentPrincipal 是静态的。这意味着它具有全局范围而不是实例范围。但是,它也恰好具有线程亲和性……即该属性标记为 [ThreadStatic]……这意味着它具有全局范围,仅适用于当前线程。这在您的场景中是个好消息,因为您使用 Thread.CurrentPrincipal 的代码不需要更改您是否处于单例模式。

ps 请检查运行 IAuthorizationPolicy 的 Thread 上下文。我确实清楚地记得过去将 Thread.CurrentPrincipal 设置为一些疯狂的、注入的安全策略的痛点。确保在 IAuthorizationPolicy 中运行的线程与调用 Service 方法的线程相同。

于 2011-08-11T21:29:00.217 回答