WCF服务限流

17

我有一个使用BasicHTTPBinding和启用SSL的控制台应用程序部署的WCF服务。同时设置了以下属性:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

我还将限流行为设置为

<serviceThrottling maxConcurrentCalls="2147483647" maxConcurrentSessions="2147483647"
        maxConcurrentInstances="2147483647" />
另一方面,我创建了一个测试客户端(用于负载测试),它同时启动多个客户端(多线程)并在服务器上执行事务。一切似乎都很好,但是在服务器上CPU利用率不增加,所以我添加了一些日志记录以查看对服务器的并发调用次数,并发现它从未超过6。
我已经仔细检查了性能计数器日志记录代码两次,但是对我来说似乎没有问题。
所以我想问这种情况的问题在哪里?我还没有指定任何ContextMode或ConcurrencyMode。
在此帖子之后,我注意到每当我启动另一个测试客户端实例时,我的并发服务器调用计数器就会增加到2,就像如果我只运行1个实例,最大并发Rcvd调用将是2,如果有两个实例,则相同的值为4等等。有没有来自单个进程的WCF调用数量限制?
******** 17-March添加 ********
今天,我在同一台运行服务器的机器上使用一个测试客户端(具有50个并发用户)进行了另一项测试。这次我得到了我想要显示的确切结果(即最大并发调用由服务器接收=50)。
但我也需要在其他机器上做到这一点。有人可以帮助我吗?
2个回答

23

或者在客户端中使用此配置。

<system.net>
    <connectionManagement>
      <add maxconnection = "200" address ="*" />
    </connectionManagement>
  </system.net>

这里的200是客户端的限制


这里描述了http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx,也许你需要知道这个http://support.microsoft.com/kb/969189。 - NoWar
我添加了maxconnection="100" address="*",但在WCF中仍无法获得超时错误。 - Arul Sidthan

19

我找到了一个解决方案:ServicePointManager上有一个连接限制导致了这个问题。如果想要移除这个限制,你只需要进行以下设置:

System.Net.ServicePointManager.DefaultConnectionLimit = X;

默认限制为2。


4
这条线路要去哪里?这是客户端还是WCF服务的设置? - Brock Adams
1
抱歉回复晚了:这适用于任何使用 .net 应用程序向任何服务器进行多个并发出站连接的情况。 - Mubashar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接