Обработчик 404 получает исключение «Ручка не инициализирована» - PullRequest
5 голосов
/ 07 марта 2012

Я использую описанный ниже подход для обработки 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>

На странице default.aspx:

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)

Ответы [ 2 ]

2 голосов
/ 08 марта 2012

У меня та же проблема, но я еще не нашел решения. Я подтвердил, что проблема вызвана установкой свойств StatusCode или Status в ответе, это влияет на IIS 7 и IIS Express, но не на Cassini, что имеет смысл, учитывая трассировку стека.

Я буду продолжать расследование.

Изменить: Не повезло в поиске решения. Я разместил тот же вопрос на форумах IIS: http://forums.iis.net/p/1187959/2016914.aspx#2016914

Редактировать 2: подтверждено как исправленное в .NET 4.5 RC.

0 голосов
/ 05 июня 2012

Леви : мы обнаружили причину и поставили в очередь исправление.

Эндрю МакЛахлан Подтверждено как исправленное в .NET 4.5 RC

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...