代码之家  ›  专栏  ›  技术社区  ›  Stefan Mohr

生产服务器上的ASP.NET会话问题

  •  4
  • Stefan Mohr  · 技术社区  · 14 年前

    这是一个相当模糊的问题,因为我在生产Web服务器之外复制我的问题时运气不佳,不确定我的两个问题是否相关。

    我的应用程序服务器运行的是Windows Server 2003,面向公众。ASP.NET Web应用程序在.NET 3.5中运行,并在LAN上使用(私有)SQL Server(2008)。运行SQL Server的服务器还托管SQL Server Reporting Services,该服务通过包含MS ReportViewer控件的页面在我们的Web应用程序中使用。

    该应用程序以前是针对.NET 1.1运行的,去年迁移到了3.5。数据库是SQL Server 2000,今年早些时候在一个单独的版本中进行了更新。

    我在我们的部署中遇到了两个奇怪的问题 必须 以配置为基础,但我已经没有嫌疑犯了。

    这两个问题都与用户会话丢失有关。

    第一次发生在报告中,并在ReportViewer控件中触发。很少情况下,我们的用户会试图操纵一个报表(我发现了一个针对特定用户和报表组合的可复制案例——当我尝试更改报表页面时,总是抛出一个异常)。

    异常调用堆栈如下所示:

    Microsoft.Reporting.WebForms.aspNetSessionExpiredException:ASP.NET会话已过期或找不到 在Microsoft.Reporting.WebForms.ViewerDaoOperation..ctor()上 在Microsoft.Reporting.WebForms.ReportDataOperation..ctor(Boolean RequiresFullReportLoad) 在microsoft.reporting.webforms.httphandler.gethandler(string operationtype)上 在Microsoft.Reporting.WebForms.httpHandler.ProcessRequest(httpContext上下文) 在system.web.httpapplication.callHandlerExecutionStep.system.web.httpapplication.ieExecutionStep.Execute()上 在system.web.httpapplication.executeStep(iexecutionStep步骤,布尔值&同步完成)

    Web应用程序被配置为使用Inproc状态存储,因此第二个IIS进程将无法定位用户的会话-根据我读过的一些博客,这通常就是这个异常的含义。 我可以看到IIS向另一个工作进程收集额外的请求…但站点配置为使用单个进程。这个异常不应该被抛出-因此,要么是IIS GUI工具对我撒谎,说Web应用被配置为单进程,要么是异常消息没有描述真正的问题。

    我在IIS中创建了一个新的应用程序池,配置为每10000个请求以及凌晨2点回收工作进程。(10000请求规则是解决可能存在或可能不存在的问题的老方法-问题及其相关信息早于我,我不想尝试它) 在“性能”选项卡中,最大工作进程数设置为1。

    我能想到的唯一解决方法是遵循ReportViewer用户所说的,即将状态服务器模式从InProc切换为使用进程外序列化模型。我选择了ASP.NET状态服务器。

    除了生产服务器,它在每台服务器上都可以正常工作。当我在生产中打开它时,每个用户都有这样的体验:

    1)点击登录页面,输入凭证,登录 2)单击主页上的任何链接 3)重新启动以登录屏幕。重新输入凭据,登录。 4)在用户注销之前,该站点现在工作正常。

    同样,这个问题只存在于那个生产服务器上,在我的开发人员机器、测试服务器或公共演示服务器上是不可复制的。

    他们有关系吗?也许,也许不是。由于可用的诊断信息太少,我几乎没有什么想法。如果有人碰到了这样的事情,或者有了一条新路的想法,我会非常感激的。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Stefan Mohr    14 年前

    我能够解决这两个问题。

    第二个问题(必须登录两次)不再是可复制的。我在尝试另一个修复程序时重新注册了ASP.NET(asp net_regiis),该修复程序 可以 已经修复了它,或者另一个不相关的配置更改完成了它。

    主要问题是ReportViewer控件中的错误。无论出于什么原因,ASP.NET开始记录更多的异常,直到我报告的异常,并且我得到了一个根本原因的提示,在这个连接问题中概述了这一点:

    https://connect.microsoft.com/VisualStudio/feedback/details/556989/blank-gif-resource-generates-server-error-in-reportviewer-in-non-ie-browsers?wa=wsignin1.0#tabs

    我在那里也张贴了一个工作区。这是为ReportViewer提供服务的Web服务中的一个错误。该错误仅被非IE浏览器触发。