WCF中的多线程单例 - 什么是适当的服务行为?

时间:2013-10-17 18:19:38

标签: multithreading wcf service singleton servicebehavior

我有一个实现多线程单例模式的类(ZogCheckPublisher)。此类在由Windows服务托管的WCF服务的公开方法(PrintZogChecks)中使用。

public class ProcessKicker : IProcessKicker
{
   public void PrintZogChecks(ZogCheckType checkType)
   {    
       ZogCheckPublisher.Instance.ProcessCheckOrCoupon(checkType);
   }
}

ZogCheckPublisher跟踪当前正在打印的“checkType”,并拒绝复制当前活动的打印请求的请求。我试图了解ServiceBehaviors和使用的适当行为。我认为这是合适的:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]

多线程服务的一个实例。如果我理解正确的事情?

1 个答案:

答案 0 :(得分:2)

您的理解是正确的。

服务行为将实现服务的单个多线程实例。

[ServiceBehaviorAttribute(Name = "Test", InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple]

在单例服务中,配置的并发模式单独控制挂起调用的并发执行。因此,如果使用ConcurrencyMode.Multiple配置服务实例,则允许并发处理来自同一客户端的调用。呼叫将由服务实例以离开频道的速度执行(达到节流限制)。当然,与有状态的非同步服务实例一样,您必须同步对服务实例的访问或风险状态损坏。

以下链接提供了额外的并发管理指南:
Multithreaded Singleton WCF Service
http://msdn.microsoft.com/en-us/library/orm-9780596521301-02-08.aspx

此致