我有一个WCF服务,我想一次处理来自所有客户端的一个请求。我希望处理客户A的请求,并且客户B要等到客户A完成,然后服务才会尝试查看它。我认为下面的代码完成了这个。
[ServiceContract]
public interface IRestServiceImpl
{...}
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]
public class RestServiceImpl : IRestServiceImpl
{...}
如何一次只允许处理一个客户端并强制其他客户端在队列中等待?
答案 0 :(得分:0)
您需要控制服务实例的数量以及并发模式。默认情况下,您的服务将配置为InstanceContextMode.PerSession
。这意味着客户A的所有请求都将按顺序处理,客户B也将如此处理,但由于他们没有使用相同的服务实例,因此不会相互处理它们。
尝试修改ServiceBehavior
,如下所示:
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single,
InstanceContextMode=InstanceContextMode.Single)]
public class RestServiceImpl : IRestServiceImpl
{...}
有关该主题的更多信息,请查看MSDN documentation on Sessions, Instancing and Concurrency.