我正在阅读这个msdn页面,它说并发模型默认为single:http://msdn.microsoft.com/en-us/library/system.servicemodel.servicebehaviorattribute.concurrencymode.aspx
是的,这个页面看起来像是为每个客户端创建了一个新实例:http://msdn.microsoft.com/en-us/magazine/cc163590.aspx(参见每次呼叫服务标题):
"每次呼叫服务是Windows Communication Foundation的默认服务实例化模式。为每次呼叫配置服务类型时激活、服务实例、公共语言运行库(CLR)对象,仅在客户端调用进行时存在。每个客户请求获取一个新的专用服务实例。"
我读错了吗?
顺便说一句,我正在windows服务中托管我的WCF。
是单个还是多个?
CodeProject上发生的事情有一个很好的解释。以下是URL:http://www.codeproject.com/Articles/89858/WCF-Concurrency-Single-Multiple-and-Reentrant-and
长话短说,它是InstanceMode和Concurrent的结合。默认设置是对InstanceMode使用PerCall,对Concurrency使用Single。净效应:
- 为您的请求提供服务的对象的新实例将为服务的每次调用创建(PerCall)
- 您的服务一次只能使用一个线程为请求提供服务(单个)
不要将其与InstanceMode=Singleton和ConcurrentMode=Multiple或Reentrant混淆,后者中一个实例在多个线程上提供多个请求。
看看这篇文章:http://msdn.microsoft.com/en-us/library/ms731193.aspx
"在PerCall实例化中,并发性是不相关的,因为每条消息都由一个新的InstanceContext处理"