Web API服务 – 如何使服务器上的请求同时执行

我正在使用由IIS 7.5托管的WebApirest服务控制器,我从这篇文章中了解到:

是否所有Web请求都是并行执行的并且是异步处理的?

默认情况下, webApi服务并行执行所有传入请求, 前提当前多个请求 (在特定时间)来自不同的会话。 也就是说,如果单个客户端将同时向服务器发送一些请求,则所有这些请求将按顺序执行,并且不会同时执行

这种行为对我们来说是一个真正的问题 ,因为在某些情况下,我们的客户端会异步地(通过浏览器)从不同客户端的侦听器发送大量请求,并且所有这些请求实际上都会排队,而不是在服务器上同时执行 。 因此,在某些情况下,我们遇到了严重的性能问题 ,这些问题在客户的网页上非常明显。

我们怎样才能解决这个问题? 我知道我们可以禁用会话状态,但这不是正常的事情。

实际上,禁用会话状态是Web API的常规解决方案。 如果您需要一些/所有呼叫,可以调用HttpContext.SetSessionStateBehavior (例如,从Application_BeginRequest )。 多个只读会话状态请求可以并发运行。

你尝试异步任务吗? 这是示例控制器:

 public class SendJobController : ApiController { public async Task> Post([FromBody] SendJobRequest request) { return await PostAsync(request); } private async Task> PostAsync(SendJobRequest request) { Task> t = new Task>(() => { ResponseEntity _response = new ResponseEntity(); try { // // some long process // _response.responseStatus = "OK"; _response.responseMessage = "Success"; _response.responseObject = new SendJobResponse() { JobId = 1 }; } catch (Exception ex) { _response.responseStatus = "ERROR"; _response.responseMessage = ex.Message; } return _response; }); t.Start(); return await t; } }