Javascript 为什么我对web.api的请求被长时间运行的控制器代码阻止?
我正在使用angular在本地开发环境中对Web.API IIS 8.5进行ajax调用。我同时通过不同的角度控制器拨打了5个电话,每个电话如下所示: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(
$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)