Мы получаем некоторое странное поведение на нашем сайте после обновления продукта до .NET 4.5. Я постараюсь быть максимально конкретным, но проблема неясна, поэтому, пожалуйста, несите меня. Кроме того, для этого сценария, работайте в предположении, что не было передового опыта.Запросы ASP.NET и .NET 4.5 - Странное поведение
Пользователь переходит на страницу, которая делает асинхронным вызовом jquery ajax асинхронно в веб-сервисе. Из-за плохого дизайна/кодирования на этой странице это может потребоваться навсегда для загрузки, но оно предоставляет подменю, доступ к которому пользователю нужен. Как только страница начинает загружаться, они нажимают на один из параметров меню, чтобы перейти на другую страницу. Пока ничего особенного.
Когда мы используем Perfmon на коробке с .NET 4.0 только установлен, мы можем увидеть запросы ASP.NET идти вверх и вниз, как и следовало ожидать:
Когда мы устанавливаем его на ящик с установленным .NET 4.5 мы получаем:
После выполнения описанного выше рабочего процесса запрос подвешивается. Не поставлено в очередь; они просто сидят.
После дальнейших исследований мы замечаем, что щелчок между двумя разными страницами не просто простой href, но на самом деле использует Response.Redirect (url);
Кроме того, это происходит только при использовании IE. Это не проблема при использовании Firefox и Chrome.
Вот что мы пытались до сих пор:
- Мы связались с M $ и послал их DebugDiag свалки. Все еще ждут.
- Я отправился в IIS, установил сайт для отслеживания неудачных запросов и настроил фильтр неудавшихся запросов, чтобы дать мне все. После блокировки сайта я очищаю журналы, а затем изучаю, что происходит после блокировки сайта. Каждый раз, когда он подвешивается между событиями AspNetSessionDataBegin и AspNetSessionDataEnd.
- У нас есть HttpHandler, который читает/записывает на сеанс, и отключение его, похоже, исправляет проблему по большей части, но не объясняет, почему.
- Обработчик onunload jquery, который должен очищать и прерывать все оставшиеся запросы xmlhttp, кажется, не выполняется постоянно.
- Установил это patch, все еще не помогло.
- В настоящее время мы изменяем методы 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\"}");
}
}
}
Любые предложения о том, где мы должны смотреть дальше?
Что делает HttpHandler выглядеть? – Nate
Вы пытались закрыть ответ? try { Context.Response.End(); } поймать (ThreadAbortException ERR) { } поймать (Exception ERR) { } – Sameh
@Sameh Я попробую, но от того, что я могу сказать, что мы используем это предварять эти данные в наших JQuery Ajax вызовов. Завершение ответа закончится, я предполагаю. – Schandlich