编写长轮询WCF服务

Ted*_*oll 25 .net asp.net wcf

我一直在WCF写一个长轮询服务.我正处于负载测试阶段,我遇到了一个问题,当我遇到5000个未完成的请求时,我开始得到:

The HTTP service located at (my service) is too busy.
Run Code Online (Sandbox Code Playgroud)

我已将其实现为WCF AsyncPattern服务,并且消耗的工作线程/ IO线程数仍然非常低(就像它应该的那样).句柄的数量看起来很好,等等.我想我碰到了一个反DOS限制而且找不到它.这是我做过的一些事情:

我已经修改了注册表,以便MaxConcurrentRequestsPerCPU不是问题.实际上,ASP.NET排队请求的数量保持为0.

我已经在Web配置中设置了服务限制,所以这不应该是一个问题.由于这个原因,WCF跟踪不会显示任何异常.

我正在使用不包含任何安全性等的自定义绑定.它只有编码和传输(httpTransport).

我已经将machine.config修改为requestQueueLimit:这是来自的processModel元素:

<processModel enable="true" 
  timeout="Infinite" 
  idleTimeout="Infinite" 
  shutdownTimeout="0:00:05" 
  requestLimit="Infinite" 
  requestQueueLimit="15000" 
  restartQueueLimit="10" 
  memoryLimit="60" 
  webGarden="false" 
  cpuMask="0xffffffff" 
  userName="machine" 
  password="AutoGenerate" 
  logLevel="Errors" 
  clientConnectedCheck="0:00:05" 
  comAuthenticationLevel="Connect" 
  comImpersonationLevel="Impersonate" 
  responseRestartDeadlockInterval="00:09:00" 
  responseDeadlockInterval="00:03:00" 
  maxWorkerThreads="250" 
  maxIoThreads="250" />
Run Code Online (Sandbox Code Playgroud)

但我仍然有这个限制(有问题的机器可以处理它,系统的其余部分异步回到消息排队系统).

任何人都可以想到其他什么吗?

我是WindowsServer 2008R2上的IIS 7.5.Asp.NET 3.5SP1.


更多信息:当我收到上述错误时,ASP.Net v2.0.50727"Requests Rejected"性能计数器跳了起来.文档表明当请求队列已满时会发生这种情况.请求队列perf计数器为0并且从不使用.

如果我启动最大工作进程,我可以超过5K并发请求.