我正在使用C#后端在ASP.NET网站上工作。 De webserver在远程服务器上运行,因为我需要一些位于客户端PC上的数据(例如:用户ID),我编写了一个客户端和服务器应用程序。因此,当用户启动客户端应用程序时,它连接到Web服务器但尚未加载页面,Web服务器启动我的服务器,该服务器向客户端询问一些数据。客户端响应后,服务器具有所需的数据,并为客户端加载网页。
为了从用户轻松访问某些属性,我想使用Session变量。但是当客户端将其数据发送到服务器时,Session变量尚不可用。当我尝试访问它时,我得到一个NullReferenceException。我相信这是因为Application_AcquireRequestState事件尚未被触发(位于Global.asax.cs中)。因为我需要使用客户端的数据,所以我将它保存在静态类中,这样我就可以随时轻松访问它。
有更好的解决方案吗?我想等待Application_PostAcquireRequestState事件触发,因为我认为Session变量在那时可用。因此,我可以将静态类中的数据加载到用户的会话变量中。这是一个好主意,还是我应该坚持目前的情况(静态类)?因为它有效,但它不是最好的方法。
提前致谢!
答案 0 :(得分:3)
会话状态足以满足每用户会话数据的需求。
请勿触摸静态,这些是在进程中按AppDomain范围设置的。 IIS将在您不知情的情况下回收AppDomain,并对静态变量进行分级。
更新:为了清楚起见,以下问题/答案解释了会话将为空的情况:
What should I do if the current ASP.NET session is null?
如果您的应用程序属于上述情况之一,这显然会使Session状态不合适。
答案 1 :(得分:1)
您是否可以设置一个虚拟页面,该页面足以构建会话,然后重定向到另一个从远程服务器获取任意内容的页面?