0

我有一个实现多线程单例模式的类(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)]

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

4

1 回答 1

2

你的理解是正确的。

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

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

在单例服务中,配置的并发模式单独控制挂起调用的并发执行。因此,如果服务实例配置了 ConcurrencyMode.Multiple,则允许同时处理来自同一客户端的调用。调用将在服务实例离开通道后尽快执行(达到油门限制)。当然,与有状态的非同步服务实例的情况一样,您必须同步对服务实例的访问,否则有状态损坏的风险。

以下链接提供了额外的并发管理指南:
多线程单例 WCF 服务
http://msdn.microsoft.com/en-us/library/orm-9780596521301-02-08.aspx

问候,

于 2013-10-17T19:10:42.063 回答