【问题标题】:ASP.NET 2.0: Why can my class access the Session object when run on my local machine, but not when I deploy it to the server?ASP.NET 2.0:为什么我的类在本地计算机上运行时可以访问 Session 对象,但在我将其部署到服务器时却不能?
【发布时间】:2011-03-16 17:10:01
【问题描述】:

我有一个在 ASP.NET 2.0 应用程序中使用的自定义 MembershipProvider。在扩展成员资格提供程序的类中,我有一个名为AttemptLogin() 的函数,如果用户有效,它会设置会话变量。在该函数内部,有许多类似于以下内容的会话变量赋值:

HttpContext.Current.Session["id"] = "12345";

AttemptLogin() 正在被 global.asax 中的 Application_BeginRequest 函数调用。当我在 Visual Studio 中打开此代码时,它运行良好,然后通过单击“开始调试”在内置开发服务器中运行它。但是,当我将它部署到我们的测试服务器(Windows 2003 Server 64 位,在 32 位模式下运行 IIS)时,当它到达上面的代码时执行中断,给我以下消息:

[NullReferenceException:对象引用未设置为对象的实例。]
   c:\Inetpub\wwwroot\Josh\App_Code\CustomMembershipProvider.cs:1097 中的 CustomMembershipProvider.AttemptLogin()
   c:\Inetpub\wwwroot\Josh\Global.asax:14 中的 ASP.global_asax.Application_BeginRequest(Object sender, EventArgs e)
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +68
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75

在这种情况下如何成功访问会话状态?为什么它在本地工作而不是在服务器上工作?

【问题讨论】:

  • 为什么不从 Session_Start 调用 AttemptLogin()?
  • @Alex - 我需要这个电话在任何时候发生。这是由于我们有一些不稳定的会话共享代码,将在不同平台上运行的几个不同应用程序的会话联系在一起。 kd7 建议的 Application_AcquireRequestState 方法似乎可以满足我的需要。

标签: asp.net iis session asp.net-2.0


【解决方案1】:

会话变量在 Application_BeginRequest 中不可用,您应该稍后通过处理 global.asax 中的 Application_AcquireRequestState 来查看管道,老实说,我很困惑为什么您的开发框没有得到空引用。

【讨论】:

  • 是的,做到了!奇怪的是,在 Visual Studio 中运行它时没有问题。我猜微软的服务器实现并不是 100% 一致的。很抱歉延迟测试/接受您的答案。问完这个问题后,我立即进入了另一个“紧急”项目。
【解决方案2】:

检查服务器上的 web.config 文件并确保 sessionState 模式已启用

<sessionState mode="InProc" />

【讨论】:

    猜你喜欢
    • 2020-12-18
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-26
    • 2021-10-30
    • 2021-01-23
    • 2022-06-14
    相关资源
    最近更新 更多