使用HTTPHandler时禁用会话状态访问
本文关键字:会话状态 访问 HTTPHandler 使用 | 更新日期: 2023-09-27 18:10:39
我有一个类,使用IHTTPHandler,不实现IRequiresSessionState或IReadOnlySessionState。我仍然看到它访问我们的会话提供程序,这导致过度使用。
堆栈跟踪:HttpRuntime。ProcessRequestInternal =>HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest =>ApplicationStepManager。ResumeSteps =>HttpApplication。ExecuteStep =>AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute =>SessionStateModule。BeginAcquireState =>SessionStateProvider。ResetItemTimeout =>SessionStateItem。保存
是否有办法告诉HttpHandler不使用会话?
很难找到关于这个问题的任何正式文档,但看起来答案是否定的。即使您不实现IRequiresSessionState
或IReadOnlySessionState
,如果您使用SQL Server会话提供程序,您仍然会看到对TempResetTimeout
过程的调用。至少这是我从测试中发现的。
如果你真的想避免会话,而不使用一个完全禁用会话的单独的web应用程序,你可以创建一个HttpModule
,而不是使用HttpHandler
。这不是一个理想的方法,但在我的测试中,它确实有效。
基本上,您可以使用BeginRequest
事件处理程序并在BeginRequest
中完成请求(即通过调用context.ApplicationInstance.CompleteRequest()
)。如果您使用SQL Profiler监视数据库,您将看到没有进行Session数据库调用。
我希望我有一个更好的答案,但这似乎是它的工作方式(在ASP。