我的游戏管理网络应用使用下面的子例程来刷新游戏列表。
它工作正常,除非用户闲置了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
答案 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