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 模式和以下设置。会话状态在旧服务器上运行良好。

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

但是,在从此处安装 .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, Byte[] buf, Int32 cb, Int32 networkTimeout, SessionNDMakeRequestResults& results) 在 System.Web.SessionState.OutOfProcSessionStateStore.SetAndReleaseItemExclusive(HttpContext context, String id, SessionStateStoreData item, Object lockId, Boolean newItem) at System.Web.SessionState.SessionStateModule System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 处 System.Web.HttpApplication 处的 .OnReleaseState(Object source, EventArgs eventArgs)。ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)]

我发现了其他 2 个具有类似症状的帖子,但是它们都没有提供有效的解决方案。

  1. 无法使用会话状态服务器....需要会话状态服务器 2.0 或更高版本。
  2. 无法使用会话状态服务器

到目前为止,我已经尝试过:

  1. 使用 aspnet_regiis -ua 后跟 aspnet_regiis -i -enable
  2. 卸载并重新安装 .NET 3.5 SP1 和 .NET 2.0
  3. 将 httpRuntime enableVersionHeader 属性显式设置为 true

注意我还在每个应用程序的 web.config 文件中设置了 MachineKey 属性,如本 MSDN 文章中所述。这是我在旧服务器上工作的东西,它与以前完全相同。

我注意到,当我只安装 .NET 2.0 时,问题完全消失了。它仅在我安装 .NET 3.5 SP1 后出现。不幸的是,其中一个应用程序的某些功能依赖于 .NET 3.5,因此不能将其卸载。

有什么想法可以诊断和解决此问题吗?

4

1 回答 1

0

好吧,我烧毁了我们就这个问题联系微软的一个支持事件。经过大约 12 小时的故障排除后,问题仍未解决。

当我开始怀疑这是否甚至是 Windows 的问题时,我发现了另一个帖子,其中有人遇到了完全相同的问题:

ASP.NET State Service 版本的问题;状态服务是1.1,网站是3.5

因此,这看起来可能是最新版本的 Virtuozzo 的错误。

我最终创建了一个在服务器启动期间运行以下 3 个命令的 Windows 服务。尽管我尝试使用 .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 也不会响应停止命令,因为它试图在主线程上完成所有工作。

于 2011-05-06T11:12:35.607 回答