asp.net mvc动作是单用户吗?

时间:2012-01-17 14:16:49

标签: asp.net asp.net-mvc multithreading

我正在尝试在我的asp.net mvc 2应用程序中使用并行功能。我在视图中以表格格式加载了一个ip地址列表。而且我想知道它们是否可以ping通。所以我在jQuery.ajax()的帮助下在控制器上为每个ip地址启动GetStatus(string ip)动作。我可以在firebug中看到所有请求都被激活了。但是在log4net日志的服务器端,我可以看到这些请求是按顺序执行的。

所以我在这里有两个问题

  • asp.net mvc操作是单用户吗?这意味着如果一个动作被多个用户调用,那么该特定动作是否会逐个为每个用户执行,而不是由asp.net或IIS创建的单独(神奇)线程执行?

  • 我的方法是使其并行,因为ping是网络操作。

我在asp.net工作,但这方面对我来说似乎不太新鲜。在这方面特定的任何资源都是最受欢迎的。

编辑:我正在研究Asp.Net MVC 2

2 个答案:

答案 0 :(得分:3)

如果您在行动中使用会话,则会发生这种情况。由于会话不是线程安全的,因此ASP.NET序列化对它们的访问。因此,如果您对来自同一会话的相同操作有2个并行请求(AJAX请求就是这种情况),并且此操作写入ASP.NET会话,则这2个请求将按顺序排队并执行。

如果您在web.config(<sessionState mode="Off" />)中禁用了会话,或者为给定的控制器禁用了该会话,则将不再按顺序处理请求,而是并行处理。当然,这意味着该控制器应该根本不使用会话或仅将其用于只读。请参阅[SessionState]属性:

[SessionState(SessionStateBehavior.ReadOnly)]
public class HomeController: Controller
{
    // actions in this controller can be processed in parallel
    // for requests from the same session
}

答案 1 :(得分:0)

不,这不是单个用户。 asp.net webform / mvc将创建一个新线程来处理新请求。两个不同的请求同时会有两个线程。

log4net将缓冲所有日志请求,并一次刷新所有日志请求。你根本不能在一行写两个句子。