2011-03-16 61 views
1

服务器端在Windows 2003计算机上安装了asp.net 2.0 *的VB asp代码。我们遇到了一个奇怪的问题,第一次用户连接到网站时,Global.asa中的Session_OnStart触发,但会话对象为空。一些简单的像:global.asa中的经典asp错误:需要的对象:'Session'

Session.Timeout = 30 

导致以下错误:所需的对象:在IIS管理器主目录选项卡“会话”

该网站已经被“创造”,而会议在配置页面启用为该网站。

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

对此提出建议?代码没有错误,因为它在旧的Win2000系统上工作。

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

+0

听起来像你混合经典的ASP与ASP.net经典的asp.net没有“配置页面”经典的ASP与ASP.net 2.0无关如果你想运行ASP.net,你会需要将您的全局文件重命名为Global.asax。 – Dee 2011-03-16 19:48:01

+0

不试图运行任何asp.net,只是asp。我想列举出安装的内容。 – MonkeyWrench 2011-03-17 01:19:55

+0

由于应用程序尚未完成初始化(可能是第一个请求),所以'Session'可能还没有创建,所以我猜这里没有真正的解决方法。你有没有其他用途来'会话',或者你只是设置'超时'的价值? – 2011-03-17 10:38:36

回答

2

找出问题所在。这是由于该网站使用的应用程序池中有多名工作人员。由于不能保证哪个工作进程会处理客户端的请求,并且每个工作进程都会创建它自己的客户端会话实例,所以当IIS确定不同的工作进程应该处理请求时,该会话将被删除并重新创建。问题是通过在应用程序池中只使用一个工作进程来解决的,并将所有其他网站从应用程序池中取出并放入其中。

我现在正在寻找一种方法让应用程序池中有多个工作人员,但让客户端与工作进程保持一致。但这是我将研究的一个不同的问题。

+0

干杯!你的意思是网络花园? – 2011-03-26 18:06:24

+0

网络花园,番茄花园......当然。是。 – MonkeyWrench 2011-03-28 13:08:33

+0

lol希望它能提供好的作物! ;) – 2011-03-28 13:16:41

0

非常有趣的问题。

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

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

您也可以调用在此块中创建对象的代码;这样,如果你发现会话被破坏了,你可以重新创建它们。

+0

试过了,有时用户最终会在两者之间循环几秒钟...并不理想。 – MonkeyWrench 2011-03-25 12:48:07