如何配置WCF来处理大量并发用户?

时间:2013-11-01 15:59:45

标签: c# .net sql wcf azure

我们正在开发一个利用WCF + SQL Azure进行数据访问的多租户系统。基本上我们在Azure中托管了WCF服务,我们的客户端连接到该服务,然后这个WCF服务向SQL数据库查询数据并将数据返回给客户端。其他所有工作都很好但我们在客户端和WCF之间的通道上有一些奇怪的性能问题。

似乎如果有足够的并发用户使用我们的服务,WCF将开始阻止连接。并且“足够”我的意思是20-30个用户每秒大约进行1次查询,这反过来应该是我希望WCF能够毫无问题地处理的东西。每次查询在WCF服务中花费的时间不到1秒,通常为100到200毫秒。

我们认为WCF阻止连接的原因是:

  1. 我们正在记录在WCF服务中花费的时间和时间 WCF调用占总数,并且之间存在很大差异 这些。例如,在WCF服务中花费的时间可能是100毫秒 总时间(从客户的角度来看)可能是5000毫秒甚至是 10000ms。
  2. 客户端可以正常运行,直到它首先命中 穗。后续调用将花费很长时间甚至是 超时。
  3. 有时客户端根本无法连接到服务。
  4. WCF服务正在使用netTcpBinding并配置了以下设置:

    ServicePointManager.DefaultConnectionLimit = 1024;
    netTcpBinding.MaxConnections = 1024;
    netTcpBinding.SendTimeout = 5 minutes
    netTcpBinding.ReceiveTimeout = 5 minutes
    serviceThrottlingBehavior.MaxConcurrentCalls = 1024;
    serviceThrottlingBehavior.MaxConcurrentInstances = 1024;
    serviceThrottlingBehavior.MaxConcurrentSessions = 1024;
    

    我不确定这是否重要,但所有客户都在同一IP地址后面。此外,为每个请求打开和关闭通道(主要是因为Azure在空闲1分钟后关闭连接,我们无法弄清楚如何以稳健的方式处理此连接)。

    有什么想法吗?

    以下问题与此相关,但他们确实没有提供答案: How to scale SQL azure? SQL Azure vs WCF Performance

1 个答案:

答案 0 :(得分:1)

在WCF中启用诊断,它将帮助您识别问题。

再次看一下你的限制配置:

http://msdn.microsoft.com/en-us/library/ms731379.aspx

http://msdn.microsoft.com/en-us/library/vstudio/ms735114(v=vs.100).aspx

http://www.codeproject.com/Articles/33362/WCF-Throttling

如果要传输大型对象,请将默认TransferMode更改为Streammed。