【问题标题】:WCF Service Web Service Concurrency.SingleWCF 服务 Web 服务并发.Single
【发布时间】:2012-12-20 18:39:18
【问题描述】:

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

[ServiceContract]
public interface IRestServiceImpl
{...}

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

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

【问题讨论】:

    标签: c# wcf service web


    【解决方案1】:

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

    尝试如下修改您的ServiceBehavior

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

    有关该主题的更多信息,请查看MSDN documentation on Sessions, Instancing and Concurrency.

    【讨论】:

    • 我在发布问题后不久就偶然发现了这些设置,并一直在对其进行测试。看起来他们正在按照我需要的方式来应对我的情况。也感谢您的回答。
    猜你喜欢
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多