我正在本地开发环境中使用 Angular 向 Web.API(IIS 8.5 托管)发出 ajax 调用。我同时通过不同的 Angular Controller 进行 5 个调用,每个调用如下所示:
$scope.medications = API.Client.MedicationProfiles.query({ clientId: clientId });
API 服务对 Client.MeminationProfiles 资源具有以下定义:
this.Client.MedicationProfiles = $resource(
'/Noteable.API/api/Client/:clientId/MedicationProfiles/:id',
{
clientId: '@clientId',
id: '@Id'
},
{
update: { method: 'PUT' }
}
);
我可以在页面加载时使用 chrome 开发工具基本上立即看到所有发送到服务器的请求,但它们似乎一次返回一个,就好像它们是同步运行的一样。我将 thread.sleep 放入 Web.API Controller 操作之一中,果然,在该操作之后发出的所有调用都无法返回,直到休眠操作返回为止。这对我来说没有任何意义,我想知道是否有人可以告诉我在什么情况下他们会期望这样。
最佳答案
这可能是在 Web API 后端实现异步模式的好情况 - 一旦 ajax 调用到达您的 Controller ,您就可以摆脱它们的阻塞。这可以通过利用 async
来实现和 await
图案。您需要返回 Task
,代表异步操作。
示例可能包括...
public async Task<IHttpActionResult> Put(string clientId)
{
var response = await this.yourService.yourSavingMethod(clientId);
return Ok(response);
}
另请参阅问题 Why is this web api controller not concurrent?了解有关该问题的更多详细信息和见解。此外,可以更改 ASP.NET session 状态的默认行为以适应并发请求。一个例子可能包括
HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.ReadOnly)
关于javascript - 为什么我对 web.api 的请求被长时间运行的 Controller 代码阻止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30057531/