asp.net-mvc - 异步 Asp.Net MVC Controller 方法?

标签 asp.net-mvc ajax asp.net-mvc-3 jquery asynchronous

我将构建一个 Asp.net MVC 3 网页。

View : View (网页)对方法调用大约五个 Ajax(jQuery) 调用,这些方法在 Controller 中返回 JsonResult,并将结果呈现在网页上。

控制: Controller 方法使用 EF4 读取 SQL Server 2008 数据库。其中两条 SQL 语句可能需要半分钟才能执行,具体取决于服务器负载。

我希望用户至少能够尽快看到快速 Controller /数据库调用返回的内容。该页面不会有很多用户(最多 15 个)。如果长期运行的 Controller 方法调用不是异步的,是否会阻塞其他方法?还是说只要线程池足够大,能够处理用户的峰值请求就没有关系?

最佳答案

从用户的角度来看,加载初始网页是同步的,即他必须等到服务器交付页面。然而,Ajax 请求对他来说看起来是异步的,因为他已经可以看到页面的一部分。

从服务器的角度来看,一切都是同步的。有一个 HTTP 请求需要处理,答案可以是 HTML、JSON 或其他任何内容。客户端将等待直到收到答案。并且可以并行处理多个请求。

因此,除非您实现一些特殊的锁定(在 Web 服务器上或在数据库中)来阻止某些请求,否则不会阻止任何内容。

所提出的方法对我来说似乎很好。

更新:

有一件事我忘记了:ASP.NET 包含一个锁定机制来同步对 session 数据的访问,如果您有来自同一用户的多个并发请求,该锁定机制可能会造成干扰。查看 SessionState 属性,了解解决该问题的方法。

更新2:

对于从用户角度来看的异步行为,无需使用 AsyncController 类。它们是为其他目的而构建的,这与您的情况无关,因为只有 15 个用户。

关于asp.net-mvc - 异步 Asp.Net MVC Controller 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6711007/

相关文章:

asp.net-mvc - MVC 5 从 BeginExecuteCore 重定向到另一个 Controller

c# - 带有 ASP.NET MVC 的 C# 中的通知系统/服务

c# - 使用 mysql 只搜索数字

asp.net-mvc-3 - 如何在MVC3自定义编辑器模板中获取属性名称

html - 如果我的用户没有我的网站使用的字体,他们如何自动下载它?

c# - 什么是应用程序变量?我如何在 ASP.NET MVC 中声明应用程序变量?

ajax - 哪个更快——WebSockets 还是 Ajax?

jquery - 在 Jquery 中的 AJAX 调用期间加载循环

javascript - 整个表单重新呈现后,JSF CommandLink 在 Firefox 上不起作用

asp.net-mvc - MVC3 自定义输出缓存