我一直在使用带有单声道主分支的MVC 5,我怀疑单声道是否缺少以下属性的实现:
[SessionState(SessionStateBehavior.ReadOnly)]
我尝试使用属性和Thread.Sleep(5000)来装饰选定的两个控制器。结果显示,这两个请求是按顺序执行的,而不是人们期望的并行执行。
为了提供完整的信息,我一直在使用mod_mono(也是主分支)。
您是否有过单个会话的并行执行经验?
谢谢!
答案 0 :(得分:0)
请注意,某些Web服务器(如apache)可能会阻止来自同一用户的并发请求,以获取某些环境下的图像以外的资源。如果是这种情况,请告诉我们为您提供更多详细信息。
答案 1 :(得分:0)
我有同样的问题,使用fastcgi-mono-server4 + nginx和xsp4独立,所以我得出结论,在这个版本的mono中它必定是一个bug(或一些非实现的功能)(debian distribution 3.8) -2)。
我在web.config中解决了问题设置<sessionState mode="Off" />
并使用System.Runtime.Caching.MemoryCache
处理服务器端的会话,其中的密钥由GUID(用于会话ID仿真)和实际字符串组成。
要设置cookie,我在控制器基类中编写了这个覆盖
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
if(HttpContext.Request.Cookies["sid"] == null
&& HttpContext.Response.Cookies["sid"] == null) {
HttpCookie htsid = new HttpCookie("sid", Guid.NewGuid().ToString());
HttpContext.Response.Cookies.Set(htsid);
}
//...
}
我添加了一个小助手来获取同一基类中的会话ID
internal string sid {
get {
HttpCookie htk = HttpContext.Request.Cookies["sid"];
if(htk == null) {
htk = HttpContext.Response.Cookies["sid"];
}
return htk == null ? null : htk.Value;
}
}
这解决了我在Mono上的问题,在那里我需要来自同一会话的并发连接,我需要保持每个会话的状态值,但你的里程可能会有所不同。