IIS 7.5 - Vô hiệu hóa thuộc tính Tái chế chồng lấp không được tuân theo khi web.config được cập nhật


25

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 Recycletí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 Changestính được đặt thành Falsenhư 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 startsự 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ì endsự 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.


Bao lâu sau khi web.config được cập nhật trước khi quy trình worker mới được bắt đầu?
Greg Askew

Quá trình công nhân mới bắt đầu ngay khi tôi cố gắng truy cập trang web sau khi tái chế - Vì vậy, chưa đến một giây nếu tôi nhanh chóng. Nếu còn lại, sự kiện 'tắt máy' của công nhân cũ diễn ra trong 20-30 giây sau khi tái chế.
John

Tôi có cùng một vấn đề. Có sự trùng lặp
Andrew Rimmer

11
Chỉnh sửa tệp web.config khiến appDomain tải lại. AppDomain được tách biệt khỏi AppPool. Bạn không nên thấy id tiến trình W3WP mới chỉ khi thay đổi web.config. Xem tại đây treeloop.com/blog/iis-application-domain-and-pool-recycling
kheld 15/1/2015

1
@kheld hoàn toàn đúng (có thể thêm câu này dưới dạng câu trả lời) đây không phải là sự trùng lặp appool, nó là sự trùng lặp giữa appDomain. Tôi không tin rằng bạn có thể ngăn chặn điều này, nhưng bạn có thể vô hiệu hóa tái chế miền ứng dụng khi thay đổi.
Sam Cogan

Câu trả lời:


1

Từ bài đăng MSDN này: https://bloss.msdn.microsoft.com/tess/2006/08/02/asp-net-case-study-lost-session-variables-and-appdomain-rec đua /

Vì vậy, là một phần của quy trình triển khai mã của bạn, có vẻ như nhóm của bạn sẽ tái chế khi bạn triển khai bất kỳ một trong những thay đổi sau:

Tái chế ngay lập tức

  • Web.config thay đổi
  • Thay đổi máy.config
  • Thay đổi toàn cầu.asax
  • Thay đổi thư mục Bin
  • App_Code thay đổi

( mượn từ: /programming/302110/what-causes-an-application-pool-in-iis-to-recycle )

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.