2011-03-16 60 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