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