Otrzymujemy dziwne zachowanie na naszej stronie po aktualizacji produktu do .NET 4.5. Postaram się być jak najbardziej konkretny, ale problem jest niejasny, więc proszę o cierpliwość. W przypadku tego scenariusza należy także pracować przy założeniu, że nie zastosowano najlepszych praktyk.Prośby ASP.NET i .NET 4.5 - Dziwne zachowanie
Użytkownik przechodzi do strony, która wykonuje asynchronicznie szereg wywołań jquery ajax, do usługi internetowej. Z powodu złego projektowania/kodowania na tej stronie ładowanie może trwać wiecznie, ale zapewnia podmenu, do którego użytkownik potrzebuje dostępu. Gdy strona zacznie się ładować, kliknie jedną z opcji menu, aby przejść do innej strony. Jak dotąd nic nadzwyczajnego.
Gdy używamy perfmon na pudełku z .NET 4.0 zainstalowany tylko widzimy żądań ASP.NET iść w górę iw dół, jak można się spodziewać:
Kiedy go zainstalować na w pudełku z zainstalowanym .NET 4.5 otrzymujemy:
Po wykonaniu przepływu pracy opisanego powyżej, żądanie zostanie zawieszone. Nie w kolejce; oni po prostu tam siedzą.
Po dalszych badaniach zauważymy, że kliknięcie między dwiema różnymi stronami to nie tylko proste href, ale w rzeczywistości jest to Response.Redirect (url);
Ponadto dzieje się tak tylko podczas korzystania z IE. Nie jest to problemem podczas korzystania z przeglądarki Firefox i Chrome.
Oto co staraliśmy się dotąd:
- Skontaktowaliśmy M $ i wysłał je DebugDiag wysypisk. Wciąż czekam.
- Poszedłem do IIS, ustawiłem witrynę, aby śledzić nieudane żądania, i skonfigurowałem filtr nieudanych żądań, aby dać mi wszystko. Po zablokowaniu witryny wyczyszczę dzienniki, a następnie sprawdzam, co się dzieje po zablokowaniu witryny. Za każdym razem, gdy jest zawieszany między zdarzeniami AspNetSessionDataBegin i AspNetSessionDataEnd.
- Mamy HttpHandler, który czyta/zapisuje do sesji, a wyłączenie go wydaje się naprawić problem w przeważającej części, ale bez wyjaśnienia, dlaczego.
- Program obsługi onunload firmy jquery, który powinien wyczyścić i anulować wszystkie pozostałe żądania xmlhttp, wydaje się nie być ciągle wykonywany.
- Zainstalowany ten patch, nadal nie pomógł.
- Obecnie zmienimy metody Response.Redirect (url) w tej logice nawigacji na Response.Redirect (url, false); (Patrz wyżej).
Ponadto zgodnie z wnioskiem, oto kod 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\"}");
}
}
}
Wszelkie sugestie, gdzie powinniśmy szukać dalej?
Co oznacza HttpHandler wyglądać? – Nate
Czy próbowałeś zamknąć swoją odpowiedź? spróbuj { Context.Response.End(); } catch (err ThreadAbortException) { } catch (Exception err) {} – Sameh
@Sameh będę próbować, ale z tego co mogę powiedzieć to wykorzystać do poprzedź te dane do naszych rozmów jQuery AJAX. Zakończenie odpowiedzi zakończyłoby się, zakładam. – Schandlich