【问题标题】:angular js async calls to MVC controller not async对MVC控制器的角度js异步调用不是异步的
【发布时间】:2014-05-15 20:30:11
【问题描述】:

快速概览我们的设置:- 用于前端的 MVC Web 应用程序,这会将 REST 请求发送到 MVC Web API。

这一切都很好,但是,我们现在引入了 AngularJS 以允许我们使用 javascript 的 2 路数据绑定。

这是一个非常好的框架,我们已经开始使用 ajax $http 请求了。

所以, 在 Angular 中,我们使用 $http 调用调用 REST WEB API 的 MVC 控制器,返回数据,在控制器内序列化为 JSON 并发送到 angularJS 请求以进行 2 路数据绑定。

我们遇到的这个问题是,我们现在一次发出多个 HTTP 请求,但是,每个请求似乎都在等待前一个请求完成,我们正在努力找出原因? 我们期望所有的请求相互独立,这样就不会有延迟或等待时间......

如果有人可以提供任何建议,将不胜感激

ps - 我希望一切都有意义

下面的角码:-

    $scope.LoadResults();
    $scope.GetHistory();
    $scope.GetUserDetails();

 $scope.GetHistory = function () {
  $http.post('/user/GetHistory/', $scope.data).success(function (data, status, headers, config) {
});
}

 $scope.GetUserDetails= function () {
 $http.post('/user/GetUserDetails/1234', $scope.data).success(function (data, status, headers, config) {
});
}


$scope.LoadResults = function () {
    $scope.data = {
        frequency: $scope.frequency,
        direction: $scope.direction,
        view: $scope.view
    };
    var userid = $('#id').val();
    var url = '/user/' + userid + '/GetUserResults/';

    $http.post(url, $scope.data).success(function (data, status, headers, config) {
        if (data.msg != '') {
                        $scope.resultssummarydata = data.aaData;

        }
        else {
            $scope.errors.push(data.error);
        }
    });
}

【问题讨论】:

  • 网络服务器是否负载过重?如果线程池的线程用完了,您可能会看到事情开始排队,而不是立即并行运行。在这种情况下,考虑使用async / await 允许I/O 繁重的操作在执行I/O 时释放线程。相关答案:stackoverflow.com/a/15190138/700926
  • 嗨,目前一切都在本地运行,并且正在使用 async / await。我大部分时间都在谷歌搜索。我们需要将 MVC 控制器设置为异步控制器吗?
  • 您似乎担心 MVC 控制器是异步的,但如果您通过 angular(或任何 js 库)对其进行 ajax 调用,这应该与它无关。控制器不必是异步的,您也不必在服务器端使用 await。显示一些角度代码。
  • 只是猜测,但如果您在 IIS 上禁用会话状态会怎样?使用 REST 一词的另一件事..实际上,您拥有的 RPC Web api 比 RESTful 更多。
  • 我认为 Patko 可能正在做某事,因为您的 Angular 代码看起来不错。尝试将其更改(或添加)到您的 web.config:。请注意——禁用会话将意味着您不能再使用 TempData。

标签: c# asp.net-mvc angularjs asp.net-mvc-4 asp.net-web-api


【解决方案1】:

请注意,如果 Patko 想将其添加为答案,他应该得到表扬,因为他才是真正想出来的人(我只是提供了关闭会话的方法)。

尝试将其更改(或添加)到您的 web.config 以关闭会话:

<sessionState mode="Off" />.

ASP.Net 中的会话实现很奇怪。如果多个 http 请求来自同一个浏览器/用户会话,它会将它们序列化并一次处理一个。除此之外,会话实现非常低效——每次请求都会将整个会话加载到内存中。

多年来,对 ASP.Net Session 实现的批评相当广泛——稍加搜索一下就可以了解它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 2021-04-23
    • 1970-01-01
    • 2014-07-14
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    相关资源
    最近更新 更多