【问题标题】:Re-enable ASP.NET session that caused IIS hang重新启用导致 IIS 挂起的 ASP.NET 会话
【发布时间】:2010-12-30 16:16:03
【问题描述】:

我正在尝试在运行两个最重要站点(IIS7 上的 ASP.NET)的客户端 Web 服务器上实现一些故障保护。我将设置应用程序池限制,这样如果任何 w3wp 进程使用 90%+ CPU 的时间超过一分钟,它就会被杀死(向任何访问者生成临时 503 Service Unavailable 消息),并且根据我的本地测试将在一分钟内重新启动 - 比让一个占用 CPU 的进程在任何时间段内关闭整个服务器要好得多。

这似乎可行,但是在我摆弄本地 IIS7 实例的过程中,我注意到如果一个请求调用我的“Kill.aspx”,即使网站恢复正常,IIS 也不会为导致它的会话提供服务悬挂。我只能从另一个会话重新启动测试站点 - 但只要我清除“杀手”浏览器上的 cookie,我就可以再次访问该站点。

因此,无论 IIS 试图以此来遏制的任何恶意行为,都无法对抗一个稍微坚定的对手。在大多数情况下,如果排泄物确实击中了粉丝,那将是编码/配置错误,而不是当时碰巧请求页面的用户的错。

因此,我想关闭此功能,因为理论上的用户不知道他们需要清除 cookie 才能再次访问该站点。我真的很感激任何关于如何实现这一点的想法。

【问题讨论】:

    标签: asp.net session iis-7 freeze


    【解决方案1】:

    您应该使用 ASP.Net Session StateServer 而不是 In-Proc(有关详细信息,请参阅 msdn)。这样,您的会话将在不同的进程中运行,并且不会受到 IIS 崩溃的影响。

    【讨论】:

    • 我已经在使用 SQL 会话状态 - 问题不在于会话丢失,而是我必须手动重置我的 cookie 并取消会话与我自己的关联,如果该会话是发送杀死应用程序的请求。所有其他会话都很好,但调用 Kill.aspx 的会话不允许获取工作页面,即使应用程序返回。
    【解决方案2】:

    关闭什么“功能”?如果工作进程被重置(以及您使用的进程内会话),则会话在重置时被吹走。

    您可能想要调查将会话存储移动到状态服务器或其他一些进程外场景。

    此外,如果一个进程被杀死,其他进程继续提供内容,您可能希望通过这种方式将应用程序池设置为使用多个工作进程(又名:网络花园)。

    接下来,作为另一种选择,您可能想要设置多个 Web 服务器并对其进行负载平衡。

    最后,您可能想要对应用进行分析,以准确了解它们是如何导致它变成虚无的。我的猜测是,您只是用这个想法掩盖了许多代码问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-11
      • 2018-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多