2010-11-09 73 views
0

只是像往常一樣「再次使用會話......」但面臨奇怪的情況。 .net 3.5asp.net會話問題:重定向後變量丟失

  1. 將對象插入到會話變量中。
  2. 就在下一行 - 已成功檢索到。
  3. 重定向,檢索 - 變量是默認值,但沒有調用對象構造函數。

我就不一一介紹了我如何度過幾個小時的調試,可以重置變量......因爲那些小時後,我剛換的StateServer模式是InProc ...任何操作和它來LIFE)

爲什麼?我曾經看到一個異常,如果我試圖插入一些非序列化的等到狀態服務器 - 但我插入並檢索...另外在跟蹤中,我看到在會話中相同類型的對象,但與另一個ID。最後 - 我使用舊的,經過測試的代碼(在重定向和會話存儲或檢索的情況下),但使用新的對象類型。

發生了什麼事)

編輯:?

經過在國家的服務器端口的防火牆流量 - ASP沒有發送有頁面請求處理過程中任何事情。這就是爲什麼我可以檢索下一行的變量。但是爲什麼他稍後將默認對象寫入狀態服務器呢?

回答

0

在序列化對象層次結構的底層類中創建了未標記爲可序列化的類。似乎asp不能拋出這樣的異常,如果不可序列化的對象嵌套到子類中。如此愚蠢(

0

Response.Redirect可能導致此行爲;一旦重定向被調用,會拋出一個線程異常終止異常,這可能會阻止設置會話變量。

這個問題可以與過載

Response.Redirect("~/default.aspx", false); 

此調用不會中止線程,因此會話變量設置成功來克服。

+0

1.我正在使用這種方法2.變量已設定 - 我在線後取回它InProc如何幫助這裏?) – 2010-11-09 23:03:20

0

你的開發機器的環境是什麼? 您的應用程序池流程模型部分,您使用了多少個工作流程?

如果您正在使用inProc會話狀態,但您的應用程序池進程模型使用多個工作進程,則會出現此類問題。

請記住,開發計算機上的應用程序池設置很可能與您的生產計算機不同。因此,在會話狀態inproc和會話狀態服務之間進行切換具有巨大的意義。

+0

這只是一個本地調試。默認調試環境。 – 2010-11-10 07:54:45

+0

我的意思是你在用什麼服務器?開發服務器或IIS?如果您使用在IIS服務器上發佈的開發服務器 – 2010-11-10 11:08:18

+0

,請嘗試使用IIS - 同樣的問題。 – 2010-11-11 13:24:52