用户闲置超过一定时间后处理NullReferenceException

时间:2018-12-11 16:46:20

标签: asp.net vb.net

我的游戏管理网络应用使用下面的子例程来刷新游戏列表。

它工作正常,除非用户闲置了20分钟以上。

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

[NullReferenceException:对象引用未设置为对象的实例。] refreshGameList()中的第15行// *第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 

1 个答案:

答案 0 :(得分:4)

在您的代码中,如果缓存为空,则If语句的第二部分仍将运行。与AndAlso一起更改

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