创建一个单例类来访问ServiceSecurityContext.Current.WindowsIdentity

时间:2016-11-07 20:34:46

标签: c# wcf wcf-security

我的WCF服务中有一个类,它使用ServiceSecurityContext.Current.WindowsIdentity来获取客户端标识。这一切都运作良好。我希望将该类作为单例,以便我可以在任何地方访问它而无需重复创建新实例。我使用的InstanceContextModePerSessionConcurrencyModeSingle

我怎么能这样做,我应该关注任何陷阱吗?顺便说一下,类使用模拟并从数据库加载用于域登录的信息,并在WCF操作期间缓存它。

1 个答案:

答案 0 :(得分:0)

WCF将自动创建包含以下内容的单例:

InstanceContextMode = InstanceContextMode.Single
  

单个:单个InstanceContext(以及服务对象)   处理应用程序生命周期内的所有客户端请求。

ConcurrencyMode = ConcurrencyMode.Multiple

ConcurrencyMode.Multiple将支持多个并发用户。

更多关于这里的内容:

https://msdn.microsoft.com/en-us/library/ms731193(v=vs.110).aspx

根据我的经验,应该避免实现单例,因为可能存在性能问题,特别是如果它们不是多线程的。即使您使用的是ConcurrencyMode.Multiple - 也无法保证线程同步(您必须自己处理)。

更多关于Synchronizing Data for Multithreading