2

我有一个 WCF 服务,我想一次处理来自所有客户端的一个请求。我希望客户端 A 的请求得到处理,客户端 B 等到客户端 A 完成,然后服务甚至尝试查看它。我认为下面的代码完成了这一点。

[ServiceContract]
public interface IRestServiceImpl
{...}

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]
public class RestServiceImpl : IRestServiceImpl
{...}

如何允许一次只处理一个客户端并强制其他客户端排队等待?

4

1 回答 1

0

您需要控制服务实例的数量以及并发模式。默认情况下,您的服务将配置为InstanceContextMode.PerSession. 这意味着客户端 A 的所有请求都将按顺序处理,客户端 B 的请求也将按顺序处理,但它们不会按顺序处理,因为它们没有使用相同的服务实例。

尝试修改您ServiceBehavior的如下:

[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single, 
                 InstanceContextMode=InstanceContextMode.Single)]
public class RestServiceImpl : IRestServiceImpl
{...}

有关该主题的更多信息,请查看有关会话、实例化和并发的 MSDN 文档。

于 2012-12-20T19:01:10.873 回答