MVC.NET SessionState 属性与 SetSessionStateBehavior

Çağ*_*tay 6 c# asp.net-mvc session session-state asp.net-mvc-5

我这里有一个奇怪的问题。我想得到一些关于它的想法。

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

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

HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Disabled);
Run Code Online (Sandbox Code Playgroud)

添加此代码后,我进行了测试,是的,会话为空,但请求仍在排队。性能问题仍然存在。然后我将上面的代码移至 httpmodule.PostMapRequestHandler 事件。当我对此进行测试时,会话再次为空,但队列问题仍然存在。发生此故障后,我将以下属性添加到我的基本控制器中。

[SessionState(System.Web.SessionState.SessionStateBehavior.Disabled)]
Run Code Online (Sandbox Code Playgroud)

尤里卡!会话为空,队列问题消失了。我的项目现在运行得非常快。

这有效,但它应该依赖于一个标志。所以我必须在这里放置 #if 预处理器条件,但我不想这样做。

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

谢谢。