48

我在 IIS 中遇到超时问题。在 web.config 中,会话超时设置为 60 分钟,但 20 分钟后会话结束。

此问题仅在 IIS7 中出现,在 IIS5 中不会出现。

经过一番调查,我发现这是由于应用程序池超时。如果应用程序池有 20 分钟没有做任何事情,IIS 将结束会话。

如果应用程序使用的是 defaultAppPool,这总是会发生,但如果我将应用程序池更改为经典的 .NET 应用程序池,则不会发生超时。

两种模式都有空闲超时,但只有在 DefaultAppPool 中才会出现这种情况。

  • 为什么是这样?
  • 成为 Classic .NET AppPool 和 DefaultAppPool 有什么区别?
  • 经典和集成之间的管道有什么区别?
4

4 回答 4

55

IIS7 进行了一些重大更改以更好地支持 WCF,其中一个关键部分是新的集成应用程序池。本次 PDC 会议从提高 WCF 服务性能的角度讨论了其中的一些挑战:http: //channel9.msdn.com/pdc2008/TL38/

此页面很好地概述了 IIS7 架构:http ://learn.iis.net/page.aspx/101/introduction-to-iis7-architecture/ 。我在本文中包含了一些关于以下两种不同类型的应用程序池的关键信息:

集成应用池模式

当应用程序池处于集成模式时,您可以利用 IIS 和 ASP.NET 的集成请求处理体系结构。当应用程序池中的工作进程收到请求时,该请求会通过一个有序的事件列表。每个事件调用必要的本地和托管模块来处理请求的一部分并生成响应。在集成模式下运行应用程序池有几个好处。首先将 IIS 和 ASP.NET 的请求处理模型集成到一个统一的进程模型中。此模型消除了以前在 IIS 和 ASP.NET 中重复的步骤,例如身份验证。此外,集成模式使托管功能可用于所有内容类型。

经典应用池模式

当应用程序池处于经典模式时,IIS 7.0 处理请求的方式与 IIS 6.0 工作进程隔离模式相同。ASP.NET 请求首先通过 IIS 中的本机处理步骤,然后被路由到 Aspnet_isapi.dll 以在托管运行时中处理托管代码。最后,请求通过 IIS 路由回以发送响应。IIS 和 ASP.NET 请求处理模型的这种分离导致一些处理步骤的重复,例如身份验证和授权。此外,托管代码功能(例如表单身份验证)仅适用于 ASP.NET 应用程序或您已为其脚本映射所有请求以由 aspnet_isapi.dll 处理的应用程序。在将生产环境升级到 IIS 7.0 并将应用程序分配到集成模式下的应用程序池之前,请务必在集成模式下测试现有应用程序的兼容性。如果应用程序无法在集成模式下工作,您应该只将应用程序添加到经典模式下的应用程序池中。例如,您的应用程序可能依赖于从 IIS 传递到托管运行时的身份验证令牌,并且由于 IIS 7.0 中的新体系结构,该过程会破坏您的应用程序。

于 2009-05-14T14:17:11.023 回答
4

经典池通过使用 IIS 和 ISAPI 的单独处理管道来处理应用程序池中的请求。集成使用集成管道,IIS 和 ASP.NET a(更好的性能)仅使用一个进程即可利用 IIS 7.0 的改进功能。好的做法是为每个应用程序创建一个新的应用程序池,然后根据应用程序需求单独配置。


经典模式遵循以下步骤:

1.传入的HTTP请求是通过IIS核心接收的。

2.请求通过ISAPI处理。

3.请求通过ASP.NET处理。

4.请求通过ISAPI回传。

5. 请求通过 IIS 核心返回,最终传递 HTTP 响应


集成模式使用:

1.传入的HTTP请求是通过IIS核心和ASP.NET接收的。

2.适当的处理程序执行请求并传递 HTTP 响应

根据 web.config 增加会话超时

请记住,增加这会导致应用程序消耗更多资源,例如内存

于 2009-04-18T20:36:27.797 回答
2

我想你的问题已经有了答案。IIS 6 和 7 有一个应用程序池超时的概念,这与会话超时不同。

模式之间有什么区别......已经解决了。我不确定您关于管道和模式差异的问题如何与您的问题相关 - 超时。

一些观点:空闲超时不会发生在有任何流量的网站上。您可能遇到了仅出现在 QA 站点或您的开发箱中的问题。空闲超时设置的存在是为了节省您的开发盒和每月 5 美元的托管公司的资源,这些公司有很多未充分利用的网站(例如我的博客)。您可能不希望公共站点上的空闲超时。

会话超时- 在 web 配置中设置,如果用户没有访问服务器,他们的会话超时。

空闲超时20 分钟内没有人完全接触 Web 服务器,因此请关闭以节省资源。在IIS 6中,它位于应用程序池的性能选项卡上 - 并且很容易禁用。在 IIS 7 中,您可以在应用程序池高级设置或processModel 元素中进行设置。我运行的 IIS 7 不如 IIS 6 多,但看起来从 web.config 中删除元素或设置为 0 会获得无限空闲超时。

于 2009-05-09T04:57:40.523 回答
0

DefaultAppPool 忽略 web.config 中的会话超时设置,但 ASPNet 应用程序池将使用 web.config 中的设置。

于 2009-05-12T21:39:28.957 回答