[英]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不匹配和大数据交换上。 但从来没有进行负载测试。 我已经浏览了很多,并尝试了大多数选项,包括,
过去两天我一直未能确定这个问题。
任何帮助,将不胜感激。
谢谢。
如果服务端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.