繁体   English   中英

基本HTTP绑定上的SelfHosted WCF服务不支持超过1000个并发请求

[英]A SelfHosted WCF Service over Basic HTTP Binding doesn't support more than 1000 concurrent requests

我自己托管了ASMX Client使用的BasicHttpBinding的WCF服务。 我正在模拟1200个用户的并发用户负载。 service方法接受一个字符串参数并返回一个字符串。 交换的数据少于10KB。 通过Thread.Sleep(2000)语句将请求的处理时间固定为2秒。 没什么别的。 我删除了所有数据库命中/业务逻辑。

同一条代码可以运行1000个并发用户。 当我将数字提升到1200个用户时,我收到以下错误。

System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a receive. ---> System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
   at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
   at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   --- End of inner exception stack trace ---
   at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   at System.Net.PooledStream.Read(Byte[] buffer, Int32 offset, Int32 size)
   at System.Net.Connection.SyncRead(HttpWebRequest request, Boolean userRetrievedStream, Boolean probeRead)
   --- End of inner exception stack trace ---
   at System.Web.Services.Protocols.WebClientProtocol.GetWebResponse(WebRequest request)
   at System.Web.Services.Protocols.HttpWebClientProtocol.GetWebResponse(WebRequest request)
   at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)
   at WCF.Throttling.Client.Service.Function2(String param)

此异常通常报告在DataContract不匹配和大数据交换上。 但从来没有进行负载测试。 我已经浏览了很多,并尝试了大多数选项,包括,

  1. 在服务器端启用跟踪和消息日志。 但没有记录错误。
  2. 要克服端口耗尽,MaxUserPort设置为65535,TcpTimedWaitDelay设置为30秒。
  3. MaxConcurrent Calls设置为600,MaxConcurrentInstances设置为1200。
  4. 打开,关闭,发送和接收超时设置为10分钟。
  5. HTTPWebRequest KeepAlive设置为false。

过去两天我一直未能确定这个问题。

任何帮助,将不胜感激。

谢谢。

如果服务端WCF日志中没有错误,我怀疑您在HTTP.SYS驱动程序层中遇到某种限制,导致请求在服务应用程序看到之前被拒绝。 我认为特定应用程序的请求队列中的默认限制可能是1000。

我不是HTTP.SYS的专家,但你可以通过运行获得一些见解:

netsh http show servicestate

我在不同的服务器上看到了类似的问题,具体取决于它们的CPU和RAM。 您没有提到服务器类型,它是如何升级的(XP Pro或Server 2003升级到Server 2008)等。我解决问题的方法是通过检查x:\\ Windows \\ Microsoft.NET \\ Framework [版本] \\ CONFIG \\ machine.config中。 显然通过IIS选择“无限制”连接并不意味着“无限制”连接。 我遇到的连接数在完全相同的毫秒之后的11个请求之后出错了。

该问题与来自同一来源的连接数有关。 性能基准测试工具位于具有相同IP的同一台PC上。 machine.config包含对来自同一源的连接数的约束。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM