Asp.net 在用户空闲超过一定时间后处理NullReferenceException

Asp.net 在用户空闲超过一定时间后处理NullReferenceException,asp.net,vb.net,Asp.net,Vb.net,我的游戏管理web应用程序使用下面的子程序刷新游戏列表 它工作正常,除非用户空闲超过20分钟 当用户空闲超过20分钟,并且用户尝试刷新网页或在其中导航时,始终会引发此错误: [NullReferenceException:对象引用未设置为对象的实例。] refreshGameList()中的第15行是下面“Catch”语句中的“Throw ex”行*\ 我怎样才能防止这种情况?通过将用户导航回登录屏幕,或者只是“唤醒”应用程序,使其不会像这样超时 谢谢 Public Sub refreshGam

我的游戏管理web应用程序使用下面的子程序刷新游戏列表

它工作正常,除非用户空闲超过20分钟

当用户空闲超过20分钟,并且用户尝试刷新网页或在其中导航时,始终会引发此错误:

[NullReferenceException:对象引用未设置为对象的实例。] refreshGameList()中的第15行是下面“Catch”语句中的“Throw ex”行*\

我怎样才能防止这种情况?通过将用户导航回登录屏幕,或者只是“唤醒”应用程序,使其不会像这样超时

谢谢

Public Sub refreshGameList(ByVal activePlanetID As Guid)
    Dim dbu As New gameUtils.DatabaseUtils
    With (Web.HttpContext.Current.Application)
        .Lock()
        Try
            Dim enviromentDataSet As DataSet = CType(Web.HttpContext.Current.Application("enviromentDataSet"), DataSet)
            If Not enviromentDataSet Is Nothing And enviromentDataSet.Tables.Contains("gameList") Then
                enviromentDataSet.Tables.Remove("gameList")
                Dim gameListParams As New ArrayList
                gameListParams.Add(New SqlParameter("@planetID", activePlanetID))
                dbu.fillDataSet(enviromentDataSet, "gamer_GetGameList", gameListParams, "gameList")
                .Item("enviromentDataSet") = enviromentDataSet
            End If
        Catch ex As Exception
            Throw ex
        Finally
            .UnLock()
        End Try
    End With
End Sub 

在代码中,如果缓存为空,if语句的第二部分仍将运行。和安达索一起改变

If Not enviromentDataSet Is Nothing AndAlso enviromentDataSet.Tables.Contains("gameList") Then
asp.net中的缓存与windows窗体中的缓存稍有不同。默认情况下,如果在特定时间段内没有活动,则会从内存中删除web服务器实例。您需要有重建缓存的步骤。您可以在global.asxa或在获取数据时访问它,例如

Public ReadOnly Property EnviromentDataSet As DataSet
    Get
        If Web.HttpContext.Current.Application("enviromentDataSet") Is Nothing Then
            ' Load the information
        End IF

        Return CType(Web.HttpContext.Current.Application("enviromentDataSet"), DataSet)
    End Get
End Property

在代码中,如果缓存为空,if语句的第二部分仍将运行。和安达索一起改变

If Not enviromentDataSet Is Nothing AndAlso enviromentDataSet.Tables.Contains("gameList") Then
asp.net中的缓存与windows窗体中的缓存稍有不同。默认情况下,如果在特定时间段内没有活动,则会从内存中删除web服务器实例。您需要有重建缓存的步骤。您可以在global.asxa或在获取数据时访问它,例如

Public ReadOnly Property EnviromentDataSet As DataSet
    Get
        If Web.HttpContext.Current.Application("enviromentDataSet") Is Nothing Then
            ' Load the information
        End IF

        Return CType(Web.HttpContext.Current.Application("enviromentDataSet"), DataSet)
    End Get
End Property

卸下锁销。就让我们试着最后一次吧。捕获是转储堆栈跟踪并隐藏实际导致错误的行,而实际上没有完成任何有效的操作。谁还会继续使用ArrayList?@JoelCoehoorn谢谢,这会修复任何问题还是仅仅指向“真正的”错误?再次感谢您将会话超时设置为20分钟?@AndrewMorton在IIS中,在web应用程序池设置下,空闲超时设置为20分钟。我不确定这是不是一回事though@SkyeBoniwell当您使用应用程序缓存时,当应用程序池被回收时,缓存确实会丢失。通常合理的做法是,在不太可能使用现场的某个时间(例如凌晨3点)每天进行一次回收。您仍然需要像莲花所展示的那样的代码,但是在重新创建数据时不会有太多的开销。就让我们试着最后一次吧。捕获是转储堆栈跟踪并隐藏实际导致错误的行,而实际上没有完成任何有效的操作。谁还会继续使用ArrayList?@JoelCoehoorn谢谢,这会修复任何问题还是仅仅指向“真正的”错误?再次感谢您将会话超时设置为20分钟?@AndrewMorton在IIS中,在web应用程序池设置下,空闲超时设置为20分钟。我不确定这是不是一回事though@SkyeBoniwell当您使用应用程序缓存时,当应用程序池被回收时,缓存确实会丢失。通常合理的做法是,在不太可能使用现场的某个时间(例如凌晨3点)每天进行一次回收。您仍然需要像lotus所展示的那样的代码,但在重新创建数据时不会有太多开销。重建会在应用程序启动时完成吗?thanks@SkyeBoniwell我想是的,但我建议您仔细研究一下,以确定是否可以在应用程序启动时进行重建?thanks@SkyeBoniwell我想是的,但我建议你仔细研究一下