我们已将服务行为设置为[ServiceBehavior(Namespace =" abc",InstanceContextMode = InstanceContextMode.PerSession,ConcurrencyMode = ConcurrencyMode.Single,UseSynchronizationContext = false)]
正如您所看到的,我们已将Concurrency Mode设置为Single,但我们仍然能够在WCF跟踪日志中看到多个ThreadID。
需要帮助以使WCF调用线程安全,以便按顺序处理每条消息。
谢谢, Srujal
答案 0 :(得分:0)
ConcurrencyMode
控制每个InstanceContext的线程。由于您使用InstanceContextMode = InstanceContextMode.PerSession
,因此您仍然允许同时存在多个服务实例,每个会话一个。
如果您改为设置InstanceContextMode = InstanceContextMode.Single
,则可以创建单件服务,即只创建一个服务实例。结合ConcurrencyMode = ConcurrencyMode.Single
,这将实现所需的行为:
服务实例是单线程的,不接受可重入的调用。如果InstanceContextMode属性为Single,并且在实例为调用提供服务时其他消息到达,则这些消息必须等到服务可用或消息超时。 (MSDN documentation ConcurrencyMode)
您可以在MSDN上的Sessions, Instancing, and Concurrency上阅读更多内容。