我正在将2个.NET网站从一个Windows 2003(IIS6)服务器迁移到另一个服务器。其中一个站点是.NET 2.0,另一个站点是.NET 3.5。我使用ASP.NET会话状态的StateServer模式与全局web.config文件中的以下设置(在C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG \目录中)。会话状态在旧服务器上正常工作。
<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,Int32 cb,Int32 networkTimeout, SessionNDMakeRequestResults&安培;结果) 在 System.Web.SessionState.OutOfProcSessionStateStore.SetAndReleaseItemExclusive(HttpContext的 context,String id, SessionStateStoreData项,Object lockId,Boolean newItem)at System.Web.SessionState.SessionStateModule.OnReleaseState(对象 source,EventArgs eventArgs)at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep 步,布尔&amp; completedSynchronously) ]
我发现了其他两个有类似症状的帖子,但是他们都没有提供有效的解决方案。
到目前为止,我已经尝试过:
注意我还在this MSDN article中概述的每个应用程序的web.config文件中设置了MachineKey属性。这是我在旧服务器上工作的东西,它与以前完全相同。
我注意到当我只安装了.NET 2.0时,问题就完全消失了。它只在我安装.NET 3.5 SP1后出现。不幸的是,其中一个应用程序依赖于.NET 3.5的一些功能,所以不能选择卸载它。
有关我如何诊断和解决此问题的任何想法?
答案 0 :(得分:0)
好吧,我烧毁了一个与微软有关此问题的支持事件。经过大约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也不会响应stop命令,因为它试图在主线程上完成所有工作。