javascript - 为什么我对 web.api 的请求被长时间运行的 Controller 代码阻止?

标签 javascript c# angularjs asp.net-web-api angular-resource

我正在本地开发环境中使用 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)

ASP.NET Session State Overview

关于javascript - 为什么我对 web.api 的请求被长时间运行的 Controller 代码阻止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30057531/

相关文章:

c# - 无法从 AngularJS 将简单的字符串数据发布到 Web API

javascript - AngularJS 服务可用性

javascript - Angular-App 如何引用其依赖项?

javascript - onclick 事件跟踪不起作用

c# - 如果参数是 T,转换为 T 会失败吗?

c# - C# 中的引用和意外结果

javascript - 在迭代 JavaScript 对象的属性时修改它

javascript - 似乎 JavaScript RegExp 没有找到 "leftmost longest"

javascript - Angular : Enhancing or wrapping promises with pre/post resolve/reject actions

javascript - 重置 Ionic ios/android 应用程序中的内容