1

Windows 2003 机器上的服务器端 VB asp 代码,安装了 asp.net 2.0*。我们遇到了一个奇怪的问题,即用户第一次连接到网站时,Global.asa 中的 Session_OnStart 会触发,但会话对象为空。像这样简单的东西:

Session.Timeout = 30

导致以下错误:需要对象:“会话”

该网站已在 IIS 管理器主目录选项卡中“创建”,并且在该站点的“配置”页面中启用了会话。

在大多数情况下,如果用户刷新页面,会话对象就会存在。但是,唯一用户的第一次访问总是会导致错误。

建议?该代码没有错误,因为它适用于旧的 Win2000 系统。

重申一下:Windows 2003 Server,运行 IIS6,安装了 .Net 2.0。网站作为应用程序运行,而不是虚拟目录。

4

2 回答 2

2

想通了问题。这是由于网站使用的应用程序池中有不止一名工作人员。由于无法保证哪个工作进程会处理客户端的请求,并且每个工作进程都会创建自己的客户端会话实例,因此当 IIS 决定由不同的工作进程处理请求时,会话将被删除并重新创建。通过在应用程序池中仅使用一个工作进程并将所有其他网站从应用程序池中移出并进入它们自己的程序,问题得以解决。

我现在正在寻找一种在应用程序池中拥有多个工作人员但让客户坚持使用工作进程的方法。但这是我要研究的另一个问题。

于 2011-03-25T12:56:03.257 回答
0

相当有趣的问题。

我们知道,当会话被明确放弃或最终超时时,它会立即被销毁。我会添加如下代码,以保证它不会发生。

If Session("test") Is Nothing Then
    Response.Redirect("Whatever.asp")
End If

您还可以调用在此块中创建对象的代码;这样,如果您检测到会话以某种方式被破坏,您可以重新创建它们。

于 2011-03-24T17:40:47.653 回答