2013-03-07 5 views
9

Мы получаем некоторое странное поведение на нашем сайте после обновления продукта до .NET 4.5. Я постараюсь быть максимально конкретным, но проблема неясна, поэтому, пожалуйста, несите меня. Кроме того, для этого сценария, работайте в предположении, что не было передового опыта.Запросы ASP.NET и .NET 4.5 - Странное поведение

Пользователь переходит на страницу, которая делает асинхронным вызовом jquery ajax асинхронно в веб-сервисе. Из-за плохого дизайна/кодирования на этой странице это может потребоваться навсегда для загрузки, но оно предоставляет подменю, доступ к которому пользователю нужен. Как только страница начинает загружаться, они нажимают на один из параметров меню, чтобы перейти на другую страницу. Пока ничего особенного.

Когда мы используем Perfmon на коробке с .NET 4.0 только установлен, мы можем увидеть запросы ASP.NET идти вверх и вниз, как и следовало ожидать:

Perfmon on 4.0 box

Когда мы устанавливаем его на ящик с установленным .NET 4.5 мы получаем: enter image description here

После выполнения описанного выше рабочего процесса запрос подвешивается. Не поставлено в очередь; они просто сидят.

После дальнейших исследований мы замечаем, что щелчок между двумя разными страницами не просто простой href, но на самом деле использует Response.Redirect (url);

Кроме того, это происходит только при использовании IE. Это не проблема при использовании Firefox и Chrome.

Вот что мы пытались до сих пор:

  1. Мы связались с M $ и послал их DebugDiag свалки. Все еще ждут.
  2. Я отправился в IIS, установил сайт для отслеживания неудачных запросов и настроил фильтр неудавшихся запросов, чтобы дать мне все. После блокировки сайта я очищаю журналы, а затем изучаю, что происходит после блокировки сайта. Каждый раз, когда он подвешивается между событиями AspNetSessionDataBegin и AspNetSessionDataEnd.
  3. У нас есть HttpHandler, который читает/записывает на сеанс, и отключение его, похоже, исправляет проблему по большей части, но не объясняет, почему.
  4. Обработчик onunload jquery, который должен очищать и прерывать все оставшиеся запросы xmlhttp, кажется, не выполняется постоянно.
  5. Установил это patch, все еще не помогло.
  6. В настоящее время мы изменяем методы Response.Redirect (url) в этой навигационной логике как Response.Redirect (url, false); (См. Выше).

Также в соответствии с просьбой, вот код HttpHandler:

public class KeepSessionAliveHttpHandler : IHttpHandler, IRequiresSessionState 
{ 
    public bool IsReusable 
    { 
     get { return true; } 
    } 

    public void ProcessRequest(HttpContext context) 
    { 

     if (context.Session.IsNewSession) 
     { 
      string redirectUrl = context.Request.Url.AbsoluteUri.Replace(context.Request.Url.AbsolutePath, VirtualPathUtility.ToAbsolute(Constant.Page_Logout)); 
      context.Response.Clear(); 
      context.Response.ContentType = "application/json; charset=utf-8"; 
      context.Response.Flush(); 
      context.Response.Write("{\"IsSessionAlive\": \"false\", \"RedirectUrl\": \"" + redirectUrl + "\"}"); 
     } 
     else 
     { 
      context.Session["KeepSessionAlive"] = TimeZoneHelper.GetCurrentUtcDateTime(); 

      context.Response.Clear(); 
      context.Response.ContentType = "application/json; charset=utf-8"; 
      context.Response.Flush(); 
      context.Response.Write("{\"IsSessionAlive\": \"true\"}"); 
     } 
    } 
} 

Любые предложения о том, где мы должны смотреть дальше?

+0

Что делает HttpHandler выглядеть? – Nate

+1

Вы пытались закрыть ответ? try { Context.Response.End(); } поймать (ThreadAbortException ERR) { } поймать (Exception ERR) { } – Sameh

+0

@Sameh Я попробую, но от того, что я могу сказать, что мы используем это предварять эти данные в наших JQuery Ajax вызовов. Завершение ответа закончится, я предполагаю. – Schandlich

ответ

4

Корпорация Майкрософт выпустила следующее исправление, которое исправляет проблему, не требуя изменений конфигурации web.config или IIS. http://support.microsoft.com/kb/2828841/en-us http://support.microsoft.com/kb/2828842/en-us

Бывшего Ответ

После дальнейшего изучения и понимания/решение, предоставляемое команда совместимости .NET, я редактирую этот ответ.

Решение похожее на ManagedPipelineHandler for an AJAX POST crashes if an IE9 user navigates away from a page while that call was in progress, кажется, работает более надежно для нас. Это поведение, которое мы испытывали в IE8-10, а не только 9.

Я собираюсь оставить здесь старый ответ, поскольку он, надеюсь, может указывать людям в другом направлении, если первый ответ не имеет значения.

Бывший Бывший Ответ

Источник заканчивал тем, что сессия замок. События AspNetSessionDataBegin и AspNetSessionDataEnd должны были быть мертвой поддавки. Для тех, кто сталкивается с этой проблемой, посмотрите, когда и как вы пишете сессию. Эти ссылки также помогли.

Replacing ASP.Net's session entirely

I just discovered why all ASP.Net websites are slow, and I am trying to work out what to do about it

Смежные вопросы