首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# Web阻塞

C# Web阻塞
EN

Stack Overflow用户
提问于 2014-12-17 18:15:03
回答 1查看 4.4K关注 0票数 0

我们已经构建了一个从外部API加载数据的web服务。一个标准页面包含6-8个模块,所有这些模块都从API中从不同的资源加载数据。它看起来像这样(每个块从一个不同的url装载,例如/cars,/phones,/games.

一个对外部API的调用可能需要10-15秒(一点也不稀奇).

当加载页面时,每个块将使用jQuery(我们使用主干)触发Ajax调用,请求我们自己的API(就像一个代理,只将调用路由到外部API)以获取数据。

从一开始我们就认为“啊很好,ajax将解决我们所有的问题”--...and--它确实是这样做的,在客户机side...However上,我们没有在服务器端使用异步或类似的东西,所以我想您可以看到我们所面临的问题……这是对的,阻塞线程。

因此,我们不能有超过2-3个并发用户.我们使用的是c# MVC和Web,在前端我们使用的是主干。

我的问题是:异步控制器会解决我们的问题吗?还是我们应该用另一种方式来实现这一点?有些人会说“只要缓存数据,你就会没事”。是的,我们正在缓存数据,但它仍然会阻塞所有线程(不像第一个请求那么长,但仍然值得注意)。

我看到了很多不同的解决方案:

  • 反向ajax类http://pokein.com/
  • SignalR?http://www.asp.net/signalr
  • 异步控制器(使用异步方法获取数据,当然.)

那么,你们有什么建议?

此外,我还发现:为什么我的异步ASP.NET Web控制器阻塞主线程?,其中的答案表明浏览器本身存在问题,在从第一个请求获得响应之前不允许多个并发调用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-29 19:41:43

解决办法真的很简单。在我的基本管理器上,我添加了以下属性: SessionState(SessionStateBehavior.Disabled)

ASP.NET对所有请求设置一个锁,这意味着如果您执行并发请求,它们将不会并行运行。

您可以在这篇文章来自微软中阅读更多有关它的信息。

对ASP.NET会话状态的访问是每个会话的独占性,这意味着如果两个不同的用户发出并发请求,则同时授予对每个单独会话的访问。但是,如果对同一个会话发出两个并发请求(通过使用相同的SessionID值),则第一个请求将获得对会话信息的独占访问。第二请求仅在第一请求完成后执行。(如果释放了信息上的独占锁,则第二个会话也可以访问,因为第一个请求超过了锁定超时。)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27532142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档