2016-11-07 87 views
0

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

我该怎么做,我应该关心任何陷阱?顺便说一下,类使用模拟并从数据库加载信息用于域登录,并在WCF操作期间对其进行缓存。

回答

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

+0

我的问题不是关于InstanceContextMode或ConcurrencyMode。我完全理解这些。为什么会导致性能问题,为什么特别是如果不是多线程呢?除非你开导我,否则我不同意你的观点。 – CodingYoshi

+0

您的文章中的设置值不支持WCF单身人士。因此,我的答案围绕着正确的设置值以及线程同步的潜在问题。 –