Asp.net 404处理程序“获取”;句柄未初始化";例外

Asp.net 404处理程序“获取”;句柄未初始化";例外,asp.net,iis-7,Asp.net,Iis 7,我使用下面的方法来处理我网站上的404个错误。这已经工作了很长一段时间,但在上个月内,我突然得到了一个“句柄未初始化”的异常,在我们的专用服务器上有许多站点(一些仍然工作,并且在开发机器上工作)。有人有什么想法吗 <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> <httpErrors existingResponse="Replace"> <r

我使用下面的方法来处理我网站上的404个错误。这已经工作了很长一段时间,但在上个月内,我突然得到了一个“句柄未初始化”的异常,在我们的专用服务器上有许多站点(一些仍然工作,并且在开发机器上工作)。有人有什么想法吗

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true"/>
  <httpErrors existingResponse="Replace">
    <remove statusCode="500" subStatusCode="-1"/>
    <remove statusCode="404" subStatusCode="-1"/>
    <error statusCode="404" prefixLanguageFilePath="" path="/default.aspx" responseMode="ExecuteURL"/>
    <error statusCode="500" prefixLanguageFilePath="" path="/error.aspx" responseMode="ExecuteURL"/>
  </httpErrors>
</system.webServer>

我也有同样的问题,但还没有找到解决办法。我已经确认,该问题是由于在响应上设置StatusCode或Status属性引起的,它会影响IIS 7和IIS Express,但不会影响Cassini,考虑到堆栈跟踪,这是有意义的

我会继续调查的

编辑:没有运气找到解决方案。我在IIS论坛上发布了相同的问题:

编辑2:在.NET 4.5 RC中确认为已修复


:我们已找到根本原因,正在排队等待修复

在.NET 4.5 RC中确认为固定


我不知道为什么会发生这种情况,但我确实发现,通过禁用runAllManagedModulesForAllRequests,问题就消失了。我将尝试在connect上归档,看看原因是否即将出现。感谢其他人确认他们也遇到了此问题。感谢danludwig提到,如果您已经登录,它就可以工作。这就是为什么我得到“一些[站点]仍然可以工作,并且在开发机器上它可以工作”的原因。由于这听起来像是在一些补丁之后才开始的,我已经在Microsoft Connect上提交了这个问题:@PhilipStears你最终在Connect上提交了吗?如果你确实发布了url,我将不胜感激,我无法找到你的报告进行bing搜索,因此在上面提交了一份新的报告链接,但最好指出我的报告是重复的,如果你这样做了。谢谢。这是一个特定于ASP.NET 4.5的代码路径。您知道服务器运行的是//构建/发布版(2011年9月)还是Beta版(2012年3月)?我们已经找到了根本原因,正在排队等待修复。根本原因甚至没有那么性感——只是缺少一个空检查:(感谢您的报告,并为给您带来的不便表示歉意!我还注意到发生了这种情况。出于某种原因,404在有用户登录时可以工作,但在用户未登录时会获得“句柄未初始化”)。
protected void Page_PreRender(object sender, EventArgs e)
{
  if (!Page.IsPostBack && Request.Url.ToString().Contains("?404;"))
  {
    HttpContext.Current.RewritePath("~/");
    Page.Header.Controls.AddAt(0, new LiteralControl("<base href='" + Request.Url.Scheme + "://" + Request.Url.Authority + "'/>"));
    Response.StatusCode = 404;
    Util.DisplayAlert("The page you are looking for no longer exists. If you navigated to this page by clicking a link within this site please <a href='/contact.aspx'>contact us</a> to let us know.");
  }
}
Exception information: 
    Exception type: InvalidOperationException 
    Exception message: Handle is not initialized.
   at System.Runtime.InteropServices.GCHandle.FromIntPtr(IntPtr value)
   at System.Web.Hosting.PipelineRuntime.GetManagedPrincipalHandler(IntPtr pRootedObjects)
   at System.Web.Hosting.UnsafeIISMethods.MgdGetPrincipal(IntPtr pHandler, IntPtr& pToken, IntPtr& ppAuthType, Int32& pcchAuthType, IntPtr& ppUserName, Int32& pcchUserName, IntPtr& pManagedPrincipal)
   at System.Web.Hosting.IIS7WorkerRequest.GetUserPrincipal()
   at System.Web.Hosting.IIS7WorkerRequest.SynchronizeVariables(HttpContext context)
   at System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context)