在 IIS7 上切换 URL 重写规则导致 CLR 崩溃

在 IIS7 上切换 URL 重写规则导致 CLR 崩溃

场景:许多用户(10 到 100 个)正在浏览网站,浏览时,URL 重写/重定向规则被切换。应用程序随机崩溃,并在异常日志表中记录以下消息(我们使用 Enterprise Library Exception 框架):

Common Language Runtime detected an invalid program

细节:

An exception of type 'System.InvalidProgramException' occurred and was caught.  ------------------------------------------------------------------------------  07/12/2011 12:02:20  Type : System.InvalidProgramException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089  Message : Common Language Runtime detected an invalid program.  Source : App_Web_wvjyf0pr  Help link :   Data : System.Collections.ListDictionaryInternal  TargetSite : System.Web.UI.WebControls.Panel __BuildControlpnlSearchResult()  Stack Trace :    at ASP.my_underscore_seperated_page_name_aspx.function() at ...

服务器:Windows 2008R2

.Net:3.5

Web服务器:IIS7

奇怪的是,在 IIS 上启用失败请求跟踪以捕获状态代码 400 - 506 时,没有捕获到任何请求/响应。

我知道每次切换规则时,Web.config 都会被修改。过于频繁地修改 Web.config 会是原因吗?

Web.Config 中的规则如下所示:

<rule name="Redirect Rule For Page Name" enabled="false" stopProcessing="true">
  <match url="PageName" />
  <conditions>
    <add input="SiteFolder/SubFolder/PageName.aspx" pattern="^(SiteFolder/)([^.])+(PageName.aspx)$" />
  </conditions>
  <action type="Redirect" url="http://www.MySite/SiteFolder/NewPage.aspx" appendQueryString="false" />
</rule>

任何帮助都将受到赞赏。

答案1

可以确定的是,每次触碰 web.config 文件时,它的 AppDomain 都会重新启动。

对我来说,这是有可能的,您可能会收到由 AppDomain 接收的请求,该请求随后不久被中止,应用程序也被清理。

提示斯科特:

http://weblogs.asp.net/owscott/archive/2006/02/21/ASP.NET-v2.0-_2D00_-AppDomain-recycles_2C00_-more-common-than-before.aspx

相关内容