【问题标题】:Accessing HttpApplicationState during Session_End在 Session_End 期间访问 HttpApplicationState
【发布时间】:2010-09-15 08:25:39
【问题描述】:

在我使用 InProc 会话的 ASP.NET 应用程序中,Session_End 调用另一个对象中的静态方法来执行特定于会话的清理。此清理使用我存储在应用程序状态中的共享数据库连接。

问题是如果不将应用程序状态(或者更确切地说是数据库连接)作为参数传递给清理方法,我无法看到如何访问应用程序状态。由于我不在请求中,因此我没有当前的 HttpContext,并且我找不到任何其他静态方法来访问该状态。

我错过了什么吗?

更新:看来我的问题需要进一步澄清,所以让我试试下面的代码示例。我想做的是:

// in Global.asax
void Session_End(object sender, EventArgs e) 
{
    NeedsCleanup nc = Session["NeedsCleanup"] as NeedsCleanup;
    nc.CleanUp();
}

但问题是CleanUp 方法又需要存储在应用程序状态中的信息。我已经在做以下事情,但这正是我希望避免的;这就是我上面所说的“......没有传递它......作为清理方法的参数”的意思。

// in Global.asax
void Session_End(object sender, EventArgs e) 
{
    NeedsCleanup nc = Session["NeedsCleanup"] as NeedsCleanup;
    nc.CleanUp(this.Application);
}

我只是不喜欢Global.asax 必须知道NeedsCleanup 对象从何处获取其信息的想法。这种东西在课堂上自成一体更有意义。

【问题讨论】:

    标签: asp.net application-state


    【解决方案1】:

    您在哪里创建“NeedsCleanup”实例?如果它在 Session_Start 中,那么您的全局类将知道如何/何时创建和销毁这些实例是有道理的。

    我了解到您希望将 NeedsCleanup 的清理与其调用方分离。也许一种更简洁的方法是通过“this”引用传入“HttpContext.Current.ApplicationInstance”以及全局类中的“HttpApplication”实例。或者,您也可以在构造时指定任何上述实例,这将减少清理耦合。

    【讨论】:

    • 经过深思熟虑,我决定你用这个答案解决问题。并不是我的问题没有(明显的)解决方案,而是我试图解决错误的问题。由于“NeedsCleanup”是在我可以获取应用程序状态时创建的,因此它应该将状态缓存在其ctor中。很好地解耦。
    【解决方案2】:

    您应该能够使用 Session_End 内部的 Application 属性访问 ApplicationState 对象。

    void Session_End(object sender, EventArgs e) 
    {
         HttpApplicationState state = this.Application;
    }
    

    (不得不以不同的答案回复,因为我没有直接发表评论所需的声誉)

    【讨论】:

    • @Greg,您可能刚刚编辑了您的原始答案。无论如何,既然你有足够的代表,你应该清理这些骗子。
    【解决方案3】:

    您应该能够使用 Session_End 内部的 Session 属性访问 SessionState 对象。

    void Session_End(object sender, EventArgs e) 
    {
        HttpSessionState session = this.Session;
    }
    

    这个属性以及更多属性来自 Global.asax 的基类

    【讨论】:

    • Session 属性是我获取执行清理的对象的地方。需要访问应用程序状态的是被调用对象。而那个就是问题所在。
    猜你喜欢
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多