我有一个实现多线程单例模式的类(ZogCheckPublisher)。 此类在由 Windows 服务承载的 WCF 服务的公开方法 (PrintZogChecks) 中使用。
public class ProcessKicker : IProcessKicker
{
public void PrintZogChecks(ZogCheckType checkType)
{
ZogCheckPublisher.Instance.ProcessCheckOrCoupon(checkType);
}
}
ZogCheckPublisher 跟踪当前正在打印的"checkType",并拒绝与当前活动打印请求重复的请求。 我正在尝试了解服务行为和要使用的适当行为。 我认为这是合适的:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple)]
多线程服务的一个实例。 如果我理解正确?
你的理解是正确的。
服务行为将实现服务的单个多线程实例。
[ServiceBehaviorAttribute(Name = "Test", InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple]
在单一实例服务中,配置的并发模式单独控制挂起调用的并发执行。因此,如果服务实例配置了 ConcurrencyMode.Multiple,则允许并发处理来自同一客户端的调用。服务实例将在调用离开通道时以最快的速度执行调用(最多达到限制)。当然,与有状态不同步服务实例一样,您必须同步对服务实例的访问,否则可能会面临状态损坏的风险。
以下链接提供了其他并发管理指南:
多线程单一实例 WCF 服务
http://msdn.microsoft.com/en-us/library/orm-9780596521301-02-08.aspx
问候