2011-04-15 21 views
1

我正在將2個.NET網站從一臺Windows 2003(IIS6)服務器遷移到另一臺。其中一個網站是.NET 2.0,另一個是.NET 3.5。我在全局web.config文件(在C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG \目錄下)中使用了ASP.NET會話狀態的StateServer模式。會話狀態在舊服務器上正常工作。無法使用會話狀態服務器,因爲此版本的ASP.NET需要會話狀態服務器2.0或更高版本

<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424"/> 

然而,從here安裝.NET 2.0和.NET 3.5 SP1框架後,我在服務器重新啓動後收到以下錯誤消息在第一時間(每次),會話超時,或應用程序池刷新。

無法使用會話狀態服務器,因爲此版本ASP.NET 的需要會話狀態服務器版本 2.0以上。[在System.Web.SessionState.OutOfProcSessionStateStore.MakeRequest(StateProtocolVerb 動詞,串ID, StateProtocolExclusive exclusiveAccess,的Int32 extraFlags, 的Int32超時,的Int32 lockCookie, 字節[] buf中,CB的Int32,的Int32 networkTimeout, SessionNDMakeRequestResults &結果) 在 System.Web.SessionState.OutOfProcSessio nStateStore.SetAndReleaseItemExclusive(HttpContext的 上下文中,串ID, SessionStateStoreData項,對象 lockId,布爾的newitem)在 System.Web.SessionState.SessionStateModule.OnReleaseState(對象 源,EventArgs的EventArgs的)在 System.Web.HttpApplication.SyncEventExecutionStep .System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步驟,布爾& completedSynchronously) ]

我發現的其它2個職位具有類似症狀,但是他們都沒有提供有效的解決方案。

  1. Unable to use session state server....requires session state server version 2.0 or above.
  2. Unable to use Session State Server

到目前爲止,我曾嘗試:

  1. 使用ASPNET_REGIIS -ua其次ASPNET_REGIIS -i -enable
  2. 卸載並重新安裝.NET 3.5 SP1和.NET 2.0
  3. 顯式在的httpRuntime enableVersionHeader屬性itly設置爲true

注意我還設置了在每個應用程序的web.config文件中的machineKey屬性爲this MSDN article概述。這是我在舊服務器上工作的東西,與以前完全相同。

我注意到,當我只安裝.NET 2.0時,問題完全消失。它只在我安裝.NET 3.5 SP1後出現。不幸的是,其中一個應用程序依賴於.NET 3.5的一些功能,因此不要將其卸載。

任何想法如何診斷和解決此問題?

回答

0

好吧,我燒掉了我們與Microsoft聯繫的關於此問題的支持事件之一。經過大約12個小時的故障排除後,問題仍然沒有得到解決。

正如我開始懷疑這是否是即使是在所有與Windows的問題,我發現了另一篇文章與一個有着完全相同的問題:

Problems with ASP.NET State Service version; state service is 1.1, website is 3.5

所以,這看起來可能是一個錯誤與最新版本的Virtuozzo。

我最終創建了一個windows服務,在服務器啓動期間運行以下3個命令。儘管我嘗試使用.bat文件並使用Windows計劃任務來激發命令,但似乎無法使其工作。創建和調試這個簡單的Windows服務需要花費大約5個小時,而這個時間可能比找出並分配正確的Windows權限以使其在計劃任務下運行所花費的時間要少。

C:\Windows\System32\SC.EXE CONFIG aspnet_state binPath= "C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_state.exe" 

C:\Windows\System32\NET.EXE stop aspnet_state 

C:\Windows\System32\NET.EXE start aspnet_state 

注意,我可能已經取得aspnet_state取決於我的Windows服務,所以我不會重新啓動aspnet_state,但我不知道,如果設置的依賴性也將得到丟棄在重新啓動並使其本這意味着我只需要安裝該服務並且不需要其他手動配置。

請注意,我也試過RunAsService,所以我不必自己構建任何東西。但是,該服務的作者沒有意識到Windows服務按定義是多線程的。我重新啓動了服務器,導致Windows無法啓動,因爲該服務沒有足夠的權限來運行配置的命令。幸運的是,我有一個備份要去,否則我將不得不從頭開始重建我的VPS。 RunAsService也不會響應停止命令,因爲它試圖在主線程上完成所有工作。

相關問題