我的WCF服务中有一个类,它使用ServiceSecurityContext.Current.WindowsIdentity来获取客户端标识。这一切都运作良好。我希望将该类作为单例,以便我可以在任何地方访问它而无需重复创建新实例。我使用的InstanceContextMode
为PerSession
,ConcurrencyMode
为Single
。
我怎么能这样做,我应该关注任何陷阱吗?顺便说一下,类使用模拟并从数据库加载用于域登录的信息,并在WCF操作期间缓存它。
答案 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 - 也无法保证线程同步(您必须自己处理)。