2011-04-15 44 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也不会响应停止命令,因为它试图在主线程上完成所有工作。

相关问题