Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我对web.api的请求被长时间运行的控制器代码阻止?_Javascript_C#_Angularjs_Asp.net Web Api_Angular Resource - Fatal编程技术网

Javascript 为什么我对web.api的请求被长时间运行的控制器代码阻止?

Javascript 为什么我对web.api的请求被长时间运行的控制器代码阻止?,javascript,c#,angularjs,asp.net-web-api,angular-resource,Javascript,C#,Angularjs,Asp.net Web Api,Angular Resource,我正在使用angular在本地开发环境中对Web.API IIS 8.5进行ajax调用。我同时通过不同的角度控制器拨打了5个电话,每个电话如下所示: $scope.medications = API.Client.MedicationProfiles.query({ clientId: clientId }); API服务对Client.MedicalationProfiles资源具有以下定义: this.Client.MedicationProfiles = $resource(

我正在使用angular在本地开发环境中对Web.API IIS 8.5进行ajax调用。我同时通过不同的角度控制器拨打了5个电话,每个电话如下所示:

$scope.medications = API.Client.MedicationProfiles.query({ clientId: clientId });
API服务对Client.MedicalationProfiles资源具有以下定义:

this.Client.MedicationProfiles = $resource(
    '/Noteable.API/api/Client/:clientId/MedicationProfiles/:id',
    {
        clientId: '@clientId',
        id: '@Id'
    },
    {
        update: { method: 'PUT' }
    }
);

我可以看到所有的请求基本上是在页面加载时使用chromedev工具一次发送到服务器的,但是看起来它们一次返回一个,好像它们是同步运行的。我在其中一个Web.API控制器操作中添加了一个thread.sleep,可以肯定的是,在该操作之后发出的所有调用都无法返回,直到休眠操作返回为止。这对我来说没有任何意义,我想知道是否有人能告诉我在什么情况下他们会想到这一点。

我认为您的问题是由浏览器或ASP.NET造成的。如果是ASP.NET,请查看以下线程:

如果是您的浏览器,请使用示例代码查看此线程:


这可能是在web api后端实现异步模式的一个很好的情况——一旦ajax调用命中控制器,您将从阻塞中得到缓解。这可以通过利用和模式来实现。您需要返回一个,它表示异步操作

一个例子可能包括

public async Task<IHttpActionResult> Put(string clientId)
{
    var response = await this.yourService.yourSavingMethod(clientId);

    return Ok(response);
}

您能分享您的web api控制器代码吗?具体来说,我们已经在web.api中启用了会话。由于需要会话访问,来自同一会话的并发调用被锁定。仅需了解后端的会话细节,我将添加到应答中。必须在没有所有细节的情况下对api实现进行最好的猜测@sonicblis@sonicblis:如果会话是阻碍您的因素,最简单的解决方案是查看如何更改您处理会话的方式。例如,详细说明如何为会话分配只读,多个只读请求可以并行运行。是的,已更改为HttpContext.Current.SetSessionStateBehavior SessionStateBehavior.ReadOnly,并且工作良好。必须强调浏览器原因。我快发疯了,搞不懂为什么我的ASP.NET核心Web API会在一个线程上处理请求,为什么甚至会出现等待/异步块。。。后来发现,当多个标签指向同一地址时,Chrome只是在延迟请求。
HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.ReadOnly)