5

tl; dr:Menu từ MvcSiteMapProvider đôi khi không tự hiển thị sau khi ứng dụng trở lại trực tuyến, mặc dù mã chạy và trình đơn hiển thị sau khi làm mới trang.MvcSiteMapProvider chưa sẵn sàng trên trang kết xuất, vấn đề bộ nhớ cache?

Tôi đang sử dụng MvcSiteMapProvider trong dự án ASP.NET MVC 3 và đôi khi sau khi chuyển ứng dụng từ ngoại tuyến sang trực tuyến (bằng cách chèn một tệp App_Offline.htm vào thư mục gốc của máy chủ và xóa) trình đơn sẽ không hiển thị bất kỳ thứ gì cho đến khi trang được làm mới.

Tôi đang sử dụng DynamicNodeProvider tùy chỉnh để truy vấn các mục menu từ cơ sở dữ liệu và sau đó hiển thị menu. Trong khi gỡ lỗi, tôi có thể thấy rằng mã này thực sự đang chạy trước khi tải trang nhưng không có menu nào được hiển thị trên trang. Tôi đã đặt bộ nhớ cache thành vài giờ và đang sử dụng khóa bộ nhớ cache tùy chỉnh để cho phép vô hiệu sau một số hành động nhất định.

Rất tiếc, tôi không thể nhận được lỗi này để tái tạo một cách nhất quán. Tuy nhiên, tôi có thể tuy nhiên, để nó tái sản xuất thường xuyên hơn nếu tôi thêm một giấc ngủ ở đầu DynamicNodeProvider - nó sẽ thất bại khoảng 60-70% thời gian với một giấc ngủ 30 + giây. Dự đoán tốt nhất của tôi cho đến nay là nó phải làm với cơ chế lưu bộ nhớ đệm vì đặt thời lượng bộ nhớ cache của tôi là 0 dường như để làm cho nó không có vấn đề gì và menu luôn bật lên. Tuy nhiên, thật khó để nói chắc chắn, vì vấn đề là khó khăn để pin xuống. Để nó ở 0 sẽ không phải là một giải pháp có thể chấp nhận được vì hiệu suất kéo.

Nguyên nhân gốc rễ của vấn đề này có thể là gì? Có ai nhìn thấy hành vi này trước hoặc có cách giải quyết không?

Trả lời

2

MvcSiteMapProvider bị cắn bởi mô hình luồng của ASP.NET SiteMapProvider theo thời gian, đặc biệt khi có định nghĩa sơ đồ trang web lớn hơn. Hiện tại không có cách giải quyết nào cho hành vi này, nhưng tôi đang lên kế hoạch thực hiện viết lại (và bỏ phụ thuộc vào ASP.NET SiteMapProvider) để làm cho nó ổn định hơn trong điều kiện nặng nề.

+0

Tôi rất mong được viết lại! – Joshua

+0

Lập kế hoạch để bắt đầu vào đầu năm 2013. Và bây giờ, tôi đang nguyền rủa tôi đã không đi theo con đường "mương thư viện cơ bản". – maartenba

+0

có liên quan đến vấn đề mà đôi khi trình đơn hiển thị các nút sai không? – 360Airwalk

1

MvcSiteMapProvider v4 đã được phát hành và là available on NuGet.

Chế độ này sử dụng cơ chế bộ nhớ cache của riêng nó là cả more configurablemore extensible so với trước đây. Cho đến nay trong v4 đã không có báo cáo của các menu biến mất hoặc các vấn đề chỉ yêu cầu đầu tiên lạ khác.

Các vấn đề liên quan