【问题标题】:Unable to use session state server because this version of ASP.NET requires session state server version 2.0 or above无法使用会话状态服务器,因为此版本的 ASP.NET 需要会话状态服务器 2.0 或更高版本
【发布时间】:2011-04-15 15:11:37
【问题描述】:

我正在将 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"/>

但是,在从here 安装 .NET 2.0 和 .NET 3.5 SP1 框架后,我在服务器重新启动、会话超时或应用程序池刷新后第一次(每次)都收到以下错误消息。

无法使用会话状态服务器,因为此版本的 ASP.NET 需要会话状态服务器版本 2.0 或更高版本。[在 System.Web.SessionState.OutOfProcSessionStateStore.MakeRequest(StateProtocolVerb 动词,字符串 id, 状态协议排他性 独占访问,Int32 额外标志, Int32 超时,Int32 lockCookie, 字节[] buf, Int32 cb, Int32 网络超时, SessionNDMakeRequestResults& 结果) 在 System.Web.SessionState.OutOfProcSessionStateStore.SetAndReleaseItemExclusive(HttpContext 上下文,字符串 ID, SessionStateStoreData 项,对象 lockId, Boolean newItem) 在 System.Web.SessionState.SessionStateModule.OnReleaseState(对象 源,EventArgs eventArgs)在 System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 在 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean & 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 属性显式设置为 true

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

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

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

【问题讨论】:

    标签: asp.net session-state session-state-server


    【解决方案1】:

    好吧,我烧毁了我们就此问题与 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 也不会响应停止命令,因为它会尝试在主线程上完成所有工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-24
      • 2010-11-25
      • 2012-08-30
      • 2010-09-24
      • 2011-09-01
      相关资源
      最近更新 更多