当前位置:  开发笔记 > 编程语言 > 正文

阻止跨WCF服务的请求数

如何解决《阻止跨WCF服务的请求数》经验,为你挑选了1个好方法。

我在三台不同的机器上平衡了WCF服务负载.

假设这些服务可以处理类型A,BC的请求.处理AB没有限制.但是,我们一次只能处理5个类型为C的请求,因此如果C类的第6个请求进入,则必须等到之前的一个请求完成.

如何确保在所有三台计算机上只处理5个C类型的请求?



1> theburningmo..:

听起来你需要跨机器信号量,你可以使用像memcached这样的分布式缓存解决方案实现一个.或者,您可以在一台机器上运行另一个WCF服务,该服务器管理负载平衡服务的信号量.

所以新服务可能看起来像这样:

[ServiceContract]
public interface ISemaphorService
{
    [OperationContract]
    void Acquire();

    [OperationContract]    
    void Release();
}
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class SemaphoreService
{
    private readonly static Semaphore Pool = new Semaphore(5, 5);

    public void Acquire()
    {
       Pool.WaitOne();
    }
    public void Release()
    {
       Pool.Release();
    }
}

在真实世界的应用程序中,您可能希望在配置或其他内容中配置信号量的数量并放入一些超时并设置机制以确保信号量及时发布和/或客户端崩溃时:

// on the client side (service C)
var client = new SemaphoreServiceClient();

try
{
   // acquire the semaphore before processing the request
   client.Acquire();

   // process request
   ...
}
finally
{
   // always remember the release the semaphore
   client.Release();
}


请注意,它会引入单点故障.
推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有