我正在尝试在我的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
答案 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)
log4net将缓冲所有日志请求,并一次刷新所有日志请求。你根本不能在一行写两个句子。