ASP.NET MVC Web API请求限制

玛莎

我们正在对一个简单的ASP.NET MVC Web API应用程序进行负载测试。当我们通过6个线程每秒发送几百个请求(我们的超时设置为5秒)时,我们会遇到以下异常之一:

"System.Threading.Tasks.TaskCanceledException A task was canceled"

或者

 "InnerException {"An error occurred while sending the request."}
 System.Exception {System.Net.Http.HttpRequestException}
 InnerException {"Unable to connect to the remote server"}
   System.Exception {System.Net.WebException} 
  InnerException {"An operation on a socket could not be performed
 because the system lacked sufficient buffer space or because a queue was full"}           
 System.Exception {System.Net.Sockets.SocketException}".

在执行请求时,我们注意到在某些阶段执行速度会减慢,并且会出现异常。我们猜测第一个错误与超时有关。我们怀疑另一个错误可能是由于Web API应用程序的连接限制所致。

我们有一个WCF应用程序,我们也向它发送了尽可能多的请求,这不会造成任何问题。

这两个应用程序都托管在同一台计算机上的IIS 7上。

MVC Web API中的连接数是否有限制?那和WCF处理连接的方式之间有区别吗?

编辑:

客户端代码:

  for (int i = 0; i < 20000; i++)
        {
            try
            {
                const string _mediaTypeHeaderValue = "application/json";
                var _serialisedRequest = "json request";

                var _content = new StringContent(_serialisedRequest);
                _content.Headers.ContentType = new MediaTypeHeaderValue(_mediaTypeHeaderValue);

                using (var _httpClient = new System.Net.Http.HttpClient())
                {
                    _httpClient.Timeout = new TimeSpan(0, 0, 5);

                    Console.WriteLine(i);
                    var _responseMessage = _httpClient.PostAsync("url", _content).Result;

                    if (_responseMessage.StatusCode != HttpStatusCode.OK)
                    {
                        var stringResult = _responseMessage.Content.ReadAsStringAsync().Result;
                    }
                }
            }
            catch (Exception genericException)
            {
                Console.WriteLine(genericException.InnerException);
            }
        }

我们发现此链接:对于密集负载应用程序,.Net 4.5中的异步HttpClient是否是错误的选择?

我们认为这可能是问题所在...

克莱斯

这可能不是WebAPI中的限制。相反,TCP堆栈如何处理连接池的问题。实际上,TCP堆栈对可创建的“外围”端口的数量有限制,大约为5,000。您可以修改注册表以调整MaxUserPort值。请参阅http://support.microsoft.com/kb/196271

1.启动注册表编辑器。

2.在注册表中找到以下子项,然后单击“参数”:HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters

3.在“编辑”菜单上,单击“新建”,然后添加以下注册表项:值名称:MaxUserPort

值类型:DWORD值数据:65534有效范围:5000-65534(十进制)默认值:0x1388(5000十进制)

话虽如此,这可能是一个值得回顾的代码段,因为与从单个客户端同时产生与服务器的多个连接相比,完成任务的方法可能更好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ASP.NET MVC Web API请求限制

来自分类Dev

限制由ASP.NET Web API服务的同时请求

来自分类Dev

ASP.net MVC Web API + Android

来自分类Dev

ASP.net MVC Web API + Android

来自分类Dev

ASP.NET MVC和WEB API

来自分类Dev

Angularjs + ASP.NET MVC + ASP.NET Web API

来自分类Dev

如何从Web API调用ASP.NET Core Web MVC

来自分类Dev

如何从Web API调用ASP.NET Core Web MVC

来自分类Dev

并发请求限制为.Net MVC / Web Api中的10个

来自分类Dev

对asp.net Web API的POST请求达到某些限制时,服务器无响应

来自分类Dev

对asp.net Web API的POST请求达到某些限制时,服务器无响应

来自分类Dev

在ASP.NET MVC Web Api中返回Json

来自分类Dev

ASP.NET vNext MVC 6 Web Api的帮助页面

来自分类Dev

ASP.NET MVC 4 / MVVM / Web API的良好结构?

来自分类Dev

使用Web API的ASP.NEt MVC返回Razor视图

来自分类Dev

ASP.NET MVC Web Api帮助页面路由

来自分类Dev

缓存ASP.NET MVC Web API结果

来自分类Dev

ASP.NET MVC Web API:发布对象列表

来自分类Dev

ASP.NET MVC Web应用到REST API

来自分类Dev

Asp.Net Mvc Web Api路由404

来自分类Dev

在Android中访问Asp.net MVC Web Api

来自分类Dev

从IIS运行ASP.NET MVC 6 Web API

来自分类Dev

Rest Web Api XML 绑定 - Asp.Net MVC

来自分类Dev

ASP Net Web Api HttpPost 丢失请求

来自分类Dev

AngularJS + ASP.NET Web API + ASP.NET MVC身份验证

来自分类Dev

ASP.NET MVC 5.1,ASP.NET Web API 2.1是否需要IIS 7.5?

来自分类Dev

从ASP.NET MVC和移动设备使用ASP.NET Web API

来自分类Dev

ASP.NET MVC和Angularjs一起+ ASP.NET Web API

来自分类Dev

从ASP.NET MVC和移动设备使用ASP.NET Web API