Tôi có một trang web giữ một khóa độc quyền trên một số tài nguyên. Tôi đã sử dụng các sự kiện .NET Application_Start và Application_End để thu thập và giải phóng khóa trên các tài nguyên này vào thời điểm thích hợp. Để điều này hoạt động chính xác, chỉ có thể có một phiên bản ứng dụng của tôi chạy tại bất kỳ thời điểm nào.
Để thực hiện điều này, tôi đã đặt thuộc Disable Overlapped Recycle
tính trên nhóm Ứng dụng thành True
. Khách sạn này được cho là đảm bảo rằng quy trình công nhân cũ sẽ tắt hoàn toàn trước khi một quy trình mới khởi động bất cứ khi nào nhóm ứng dụng được tái chế. Điều này hoạt động tốt bất cứ khi nào nhóm ứng dụng được tái chế thủ công thông qua IIS, tự động là kết quả của thời gian chờ nhàn rỗi đạt được hoặc tự động theo bất kỳ quy tắc khoảng thời gian / thời gian cụ thể nào.
Tuy nhiên, khi web.config cho trang web được cập nhật, quy tắc này sẽ không được áp dụng - Một quy trình công nhân mới bắt đầu trước khi quy trình cũ kết thúc tắt. Điều này gây ra những điều xấu xảy ra. Tôi có thuộc Disable Recycling for Configuration Changes
tính được đặt thành False
như tôi muốn nhóm ứng dụng được tái chế khi web.config được cập nhật - điều này xảy ra thường xuyên trong quá trình phát triển.
Đây có phải là một cái gì đó được mong đợi, hoặc nó là một lỗi trong IIS? Đây là tùy chọn duy nhất của tôi để thiết lập để thay đổi web.config không tái chế nhóm ứng dụng? Tôi không muốn làm điều này, vì tôi khá chắc chắn rằng nó sẽ gây ra nhiều đau đầu với những người thay đổi cấu hình và sau đó quên tái chế nhóm ứng dụng.
Cập nhật:
Nói rõ hơn, khi start
sự kiện quy trình công nhân mới được gọi trước khi quy trình công nhân cũ kết thúc, thì end
sự kiện quy trình công nhân cũ không bao giờ được gọi - Nó không xảy ra theo trình tự, nó không bao giờ xảy ra.