MVC.NET SessionState属性与SetSessionStateBehavior

时间:2018-03-05 06:53:09

标签: c# asp.net-mvc session asp.net-mvc-5 session-state

我这里有一个奇怪的问题。我想对此有所了解。

我们的项目存在一些性能问题。出现问题的原因是mvc.net的会话阻塞机制。许多请求来自具有相同会话ID的一个源,并且mvc管道将它们排队。

所以我们决定将我们的项目改为无会话。但由于某种原因,我们的项目应该根据标志行为无会话。此时我决定更改global.asax Application_BeginRequest方法的会话行为,并添加此方法:

HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Disabled);

添加此代码后,我进行了测试,是的会话为空,但请求仍在排队。性能问题仍在继续。然后我将上面的代码移动到httpmodule.PostMapRequestHandler事件。当我测试这个时,会话再次为null但队列问题仍然存在。在此失败后,我将以下属性添加到我的基本控制器。

[SessionState(System.Web.SessionState.SessionStateBehavior.Disabled)]
尤里卡!会话为空,队列问题消失了。我的项目现在运行得非常快。

这很有用,但它应该取决于旗帜。所以我必须把#if预处理器条件放在这里,我不想这样做。

这些代码有什么区别?为什么SessionState属性和SetSessionStateBehavior的行为不同?对于这种情况还有其他解决方案吗?

谢谢。

0 个答案:

没有答案