Chúng tôi đang nhận được một số hành vi lạ trên trang web của chúng tôi sau khi nâng cấp sản phẩm lên .NET 4.5. Tôi sẽ cố gắng càng cụ thể càng tốt nhưng vấn đề là mơ hồ, vì vậy hãy chịu với tôi. Ngoài ra, đối với kịch bản này, làm việc theo giả định rằng không có thực hành tốt nhất đã được theo sau.Yêu cầu ASP.NET và .NET 4.5 - Hành vi lạ
Người dùng đang truy cập trang thực hiện một số cuộc gọi jquery ajax, không đồng bộ, với dịch vụ web. Do thiết kế/mã hóa kém trên trang này, nó có thể mất nhiều thời gian để tải, nhưng nó cung cấp một menu phụ mà người dùng cần truy cập. Khi trang bắt đầu tải, họ nhấp vào một trong các tùy chọn trình đơn để truy cập trang khác. Không có gì quá đặc biệt cho đến nay.
Khi chúng tôi sử dụng perfmon trên một hộp với .NET 4.0 được cài đặt, chúng ta có thể thấy yêu cầu ASP.NET đi lên và xuống, như bạn mong chờ:
Khi chúng ta cài đặt nó trên một hộp với .NET 4.5 cài đặt chúng tôi nhận được điều này:
Sau khi thực hiện quy trình làm việc tôi đã mô tả ở trên, yêu cầu bị treo lên. Không xếp hàng đợi; họ chỉ ngồi đó.
Sau khi nghiên cứu sâu hơn, chúng tôi nhận thấy rằng việc nhấp vào giữa hai trang khác nhau không chỉ đơn giản là href, mà thực sự đang sử dụng Response.Redirect (url);
Ngoài ra, điều này chỉ xảy ra khi sử dụng IE. Đây không phải là vấn đề khi sử dụng Firefox và Chrome.
Đây là những gì chúng tôi đã cố gắng cho đến nay:
- Chúng tôi đã liên lạc với M $ và gửi chúng ra DebugDiag bãi. Vẫn đang đợi.
- Tôi đã đi đến IIS, đặt trang web để theo dõi các yêu cầu không thành công và đã thiết lập bộ lọc yêu cầu không thành công để cung cấp cho tôi mọi thứ. Khi trang web khóa, tôi xóa nhật ký và sau đó kiểm tra những gì xuất hiện sau khi trang web khóa. Mỗi khi nó bị treo giữa các sự kiện AspNetSessionDataBegin và AspNetSessionDataEnd.
- Chúng tôi có một HttpHandler mà đọc/ghi vào phiên, và vô hiệu hóa nó dường như để sửa chữa vấn đề cho hầu hết các phần, nhưng không có lời giải thích là tại sao.
- xử lý onunload của jquery, cần dọn dẹp và hủy bỏ tất cả các yêu cầu xmlhttp còn lại, dường như không thực thi liên tục.
- Cài đặt số này patch, vẫn không trợ giúp.
- Chúng tôi hiện đang thay đổi phương thức Response.Redirect (url) trong logic điều hướng này thành Response.Redirect (url, false); (Xem ở trên).
Cũng theo yêu cầu, đây là mã 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\"}");
}
}
}
Bất kỳ đề xuất về nơi chúng ta nên xem xét tiếp theo?
Gì HttpHandler trông như thế nào? – Nate
Bạn đã cố gắng đóng phản hồi của mình chưa? hãy thử { Context.Response.End(); } catch (ThreadAbortException err) { } catch (Exception err) { } – Sameh
@Sameh Tôi sẽ thử, nhưng từ những gì tôi có thể nói chúng tôi sử dụng để thêm dữ liệu này vào cuộc gọi jquery ajax. Kết thúc phản hồi sẽ kết thúc nó tôi giả định. – Schandlich