对大量呼叫进行WCF压力测试

时间:2015-03-17 17:47:50

标签: c# web-services wcf azure

我目前正在开发一种安全的WCF服务,该服务将接收大量的呼叫,例如:超过3000.我最初的方法是使用' async'来调用web服务方法。但是很快我意识到我需要使用Task.WaitAll来确保在执行失败之前成功完成所有调用。

然而,通过利用WaitAll我现在重载服务,70%的呼叫返回了' CommunicationException'和' ServerTooBusyException'输入消息。我已经查看了WCF限制选项,但仍然发现它们似乎没有任何直接影响,即(注意:在本地IIS上本地运行web服务)

<serviceThrottling 
    maxConcurrentCalls="4096" 
    maxConcurrentSessions="65536" 
    maxConcurrentInstances="2147483647"/>

同步运行webservice调用工作正常,但运行速度太慢,我对等待来自Web服务的任何回调并不感到非常麻烦 - 我只是需要解雇并忘记&#39;这些调用服务。

这是我在客户端做的一个粗略的例子...

var numberOfIterations = 3000;
var allCalls = new List<Task>();

using (var service = new WebserviceServiceClient())
{
    for (var n = 0; n < numberOfIterations; n++)
    {
        var someObject = new SomeObject(DateTime.UtcNow);
        allCalls.Add(service.WebserviceMethodAsynch(SomeObject));
    }
}
Task.WaitAll(allCalls.ToArray());

任何人都可以建议一种优雅的方法来从客户端轰炸WCF Web服务而不会出现大量失败的呼叫吗?

注意:一种方法是利用队列(在本例中为Azure队列),具有讽刺意味的是,被调用的服务在将对象添加到队列之前执行一些次要的预处理,以便由单独的,更密集的进程获取。

提前致谢

1 个答案:

答案 0 :(得分:0)

您的客户端和您的网络服务不在同一台机器上,对吧?无论如何,我相信你最好使用负载测试来达到你想要的结果:

http://www.sandeepsnotes.com/2013/05/load-and-performance-testing-of-wcf.html