【发布时间】:2011-03-25 12:49:57
【问题描述】:
我正在开发一个使用内部开发的自定义 SessionStateProvider 类的 asp.net 项目。
显然,Session_OnStart 事件没有触发。我在 Global.asax 中有代码来处理该事件。我只能通过将 Web.config 更改为使用默认的 SessionStateProvider 来执行此代码。
当我使用自定义 SessionStateProvider 类时,我必须怎么做才能执行我的 Session_OnStart 代码?我可以访问源代码。
更新:它在 MSDN 上清楚地表明,通常,Session_OnStart 仅在 Session 模式为 InProc 时触发,所以我将不得不做一些特别的事情来把它连接起来我想要。
我在 web.config 中的会话状态配置如下所示:
< sessionState cookieless="false" regenerateExpiredSessionId="true" mode="Custom"
customProvider="ProgramSessionStateProvider"
sessionIDManagerType="SessionIDManager.ProgramSessionIDManager"
sqlConnectionString="SqlSessionServices" cookieName="smartSessionID" >
< providers >
< add name="ProgramSessionStateProvider"
type="SessionStateProvider.ProgramSessionStateProvider"
connectionStringName="SqlSessionServices" writeExceptionsToEventLog="false" / >
< /providers >
< /sessionState >
再次更新:今天早上我发现了一些有趣的东西。在阅读了 Chris 的回答后,我尝试仅使用客户 SessionStateProvider 并删除了自定义 SessionIDManager 的代码。一旦我这样做了,我立即能够看到 Session_OnStart 方法执行。问题是,我的自定义 SessionStateProvider 需要自定义 SessionIDManager。 Session_OnStart 事件究竟是从哪里触发的?看起来它与SessionIDManager有关,而不是SessionStateProvider。
【问题讨论】:
-
Session_OnStart根本没有触发吗? IE。您杀死了 VS Web 服务器,将 web.config 设置为您的提供程序,开始 VS 调试,不是吗?当你不设置 web.config - 它是? -
正确。 Session_OnStart 根本没有触发。
-
on msdn.microsoft.com/en-us/library/ms178586.aspx 我可以看到对 OnEnd 的引用仅在 InProc 上工作,但对 OnStart 没有任何影响...我看不出有任何原因导致这不起作用,遗憾的是... :( 也许如果今晚我感到无聊,我会写一个简单的提供程序来尝试重现您的问题。
标签: asp.net events session global-asax session-state-provider