我自己托管了由BasicHttpBinding
消费的ASMX Client
的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不匹配和大数据交换上。但从来没有进行负载测试。我已经浏览了很多,并尝试了大多数选项,包括
过去两天我一直未能确定这个问题。
任何帮助都将不胜感激。
谢谢。
答案 0 :(得分:0)
如果服务端WCF日志中没有错误,我怀疑您在HTTP.SYS驱动程序层中遇到某种限制,导致请求在服务应用程序看到之前被拒绝。我认为特定应用程序的请求队列中的默认限制可能是1000。
我不是HTTP.SYS的专家,但你可以通过运行获得一些见解:
netsh http show servicestate
答案 1 :(得分:0)
我在不同的服务器上看到了类似的问题,具体取决于它们的CPU和RAM。您没有提到服务器类型,它是如何升级的(XP Pro或Server 2003升级到Server 2008)等。我解决问题的方法是通过检查x:\ Windows \ Microsoft.NET \ Framework [版本] \ CONFIG \ machine.config中。显然通过IIS选择“无限制”连接并不意味着“无限制”连接。我遇到的连接数在11个请求之后以完全相同的毫秒出错了。
该问题与来自同一来源的连接数有关。性能基准测试工具位于具有相同IP的同一台PC上。 machine.config包含对来自同一源的连接数的约束。