2012-03-11 40 views
11

Chúng tôi đang sử dụng IIS7 để lưu trữ ứng dụng dựa trên web asp.net. Trong môi trường này, quản trị viên và nhà phát triển có thể triển khai mã cho ứng dụng một cách thường xuyên.IIS App Pool/Restart và ASP.NET

Mã hoặc ứng dụng mới chạy dưới dạng tệp DLL vào thư mục bin ASP.NET. Khi triển khai DLL mới, IIS khởi động lại quá trình, tác động (làm chậm) tất cả người dùng trực tuyến.

Có cách nào để cấu hình IIS để chạy quá trình trong nền và một khi sẵn sàng thực hiện chuyển đổi từ trạng thái cũ sang mới mà không ảnh hưởng đến người dùng ?!

Cảm ơn bạn đã phản hồi!

Trả lời

26

IIS đã làm điều này, đó là những gì tái chế là tất cả về. CNTT đang tải tệp DLL trong khi phiên bản cũ của ứng dụng vẫn đang chạy. chỉ sau khi việc này được hoàn thành, việc tái chế đã hoàn tất.

Tuy nhiên tải của DLL chỉ là một phần của việc ứng dụng web đã sẵn sàng, cũng có thể tải ban đầu như tải/bộ nhớ đệm cho người sử dụng db, vv
Những hành động này không phải là một phần của quá trình tái chế, chúng xảy ra sau khi tất cả các DLL được nạp lại và việc tái chế đã hoàn tất.

Một thời gian ngắn, tôi gặp sự cố này với ứng dụng có thời gian khởi động rất lớn do hoạt động db/bộ nhớ đệm nặng trong khi khởi động. Vì vậy, tôi đã quan tâm nếu có một số chức năng cho phép chúng tôi thực thi mã trước khi tái chế được đánh dấu là đã hoàn thành, do đó ứng dụng được xem là lần đầu tiên được tái chế khi mọi thứ sẵn sàng chạy. Về cơ bản những gì tôi muốn là một số loại chức năng dàn dựng.
Tôi đã liên lạc với nhóm IIS về vấn đề này, thật đáng buồn là họ nói với tôi rằng không có chức năng như vậy tồn tại, cũng không phải là kế hoạch.

Để giải quyết điều này, bạn có thể thử làm như sau:

  • Sử dụng xen kẽ triển khai:
    Bạn thiết lập 2 trang web với hồ bơi ứng dụng riêng biệt. Một trong số đó là trang web LIVE, một trang web khác là trang web STAGED. Nếu bạn muốn triển khai thay đổi, bạn chỉ cần triển khai đến trang web STAGED. Sau khi mọi thứ được tải/lưu trữ, vv, bạn chuyển cài đặt URL của ứng dụng web để định tuyến lại các yêu cầu gửi từ LIVE sang STAGED. Vì vậy, một trong những LIVE trở thành STAGED mới và cách khác xung quanh. Việc triển khai tiếp theo sau đó sẽ đi đến STAGED mới một lần nữa và như vậy.

CẬP NHẬT
Rõ ràng họ đã tạo ra một mô-đun IIS cung cấp chức năng này bằng cách bây giờ:

IIS Application ấm-Up Module cho IIS 7.5

Đội IIS đã phát hành phiên bản thử nghiệm beta đầu tiên của mô-đun khởi động ứng dụng cho IIS 7.5. Điều này giúp làm ấm các ứng dụng của bạn thậm chí còn dễ dàng hơn các mô tả trước đó. Thay vì viết mã tùy chỉnh, bạn chỉ định URL của tài nguyên cần thực thi trước khi ứng dụng web chấp nhận các yêu cầu từ mạng.Sự khởi động này xảy ra trong khi khởi động dịch vụ IIS (nếu bạn đã cấu hình nhóm ứng dụng IIS là AlwaysRunning) và khi một quá trình xử lý công việc IIS tái chế. Trong quá trình tái chế, quy trình nhân viên IIS cũ tiếp tục thực hiện các yêu cầu cho đến khi quy trình công nhân mới được hoàn thành được làm ấm, để ứng dụng không bị gián đoạn hoặc các vấn đề khác do bộ nhớ cache chưa được lưu trữ. Lưu ý rằng mô-đun này hoạt động với bất kỳ phiên bản nào của của ASP.NET, bắt đầu bằng phiên bản 2.0.

Để biết thêm thông tin, hãy xem Ứng dụng khởi động trên trang web IIS.net. Để có hướng dẫn minh họa cách sử dụng tính năng khởi động, hãy xem Bắt đầu với Mô-đun Khởi động Ứng dụng IIS 7.5 trên Trang web IIS.

Xem:

http://www.asp.net/whitepapers/aspnet4

Nếu bạn sử dụng ASP.NET 4 Auto Start tính năng:

Bạn vẫn có thể chọn để tự động tái chế các quá trình lao động từ thời gian tới thời gian. Khi bạn làm điều đó, mặc dù, ứng dụng sẽ ngay lập tức khởi động lại và mã khởi động của bạn sẽ thực thi (không giống như ngày hôm nay - nơi bạn phải đợi để yêu cầu tiếp theo việc cần làm).

Sự khác biệt chính giữa Tính năng khởi động và khởi động tự động là Mô đun khởi động là một phần của quy trình tái chế. Thay vì chặn ứng dụng cho các yêu cầu, trong khi chạy mã init.
Chỉ những điều bạn nhận được bằng cách sử dụng tính năng Tự động bắt đầu là bạn không phải đợi người dùng truy cập trang, điều này không giúp ích cho trường hợp của bạn.

Xem bài viết trên blog của Gu:

http://weblogs.asp.net/scottgu/archive/2009/09/15/auto-start-asp-net-applications-vs-2010-and-net-4-0-series.aspx

UPDATE 2:

Đáng buồn thay Module hâm lại đã bị ngưng cho IIS 7/7.5:

http://forums.iis.net/t/1176740.aspx

Nó sẽ là một phần của IIS8 dù (Nó bây giờ được gọi là ứng dụng khởi Module):

http://weblogs.asp.net/owscott/archive/2012/03/01/what-s-new-in-iis-8.aspx

UPDATE 3:

Như đã chỉ ra trong các ý kiến Mô đun khởi động lại được hiển thị lại cho IIS 7.5 là Mô-đun khởi tạo ứng dụng cho IIS 7.5 sau IIS 8 đã được phát hành:

http://www.iis.net/downloads/microsoft/application-initialization

+0

Cảm ơn rất nhiều để lấy ý kiến ​​của bạn, tôi thu thập mà tôi cần phải di chuyển bộ nhớ cache và tải trước của tôi hành động đến một chế độ ngoài quá trình mà tôi có thể tắt tải một số công việc init của ứng dụng và thực hiện "tự động bắt đầu" một d cuối cùng chờ đợi cho IIS8 :) – sam360

+1

Module Warmup vẫn tồn tại cho IIS 7.5 như Mô-đun khởi tạo ứng dụng cho IIS 7.5_: http://www.iis.net/downloads/microsoft/application-initialization – NicolasF

5

Phần đầu của ntziolis answer là một chút wee không chính xác. Quá trình công nhân không được tái chế hoặc khởi động lại, nó chỉ tiếp tục chạy. Nếu đây là trường hợp, sau đó trong môi trường hồ bơi chia sẻ, bạn sẽ có các trang web bị loại ra mỗi khi một cái mới được triển khai.

Khi bạn triển khai ứng dụng ASP.NET mới, "Miền ứng dụng" của trang web trong phạm vi quy trình công nhân bị rách, chứ không phải quy trình nhóm.

Trong tái chế hồ bơi Ngoài là một khái niệm hoàn toàn riêng biệt để triển khai

Tại thời điểm này trong thời gian trong đời sống thương mại của ASP.NET, trong một triển khai, một trang web sẽ được trong tình trạng không phù hợp cho đến khi tất cả các trang web được triển khai. Vẫn chưa có câu chuyện hay về điều này từ Microsoft vào thời điểm này cho một trang web duy nhất trên một triển khai máy chủ duy nhất.

Đây là lý do tại sao ASP.NET có trang đặc biệt App_Offline.htm. Nó ở đó để bạn có thể kích hoạt trang đó, triển khai và sau đó tắt nó đi.

Phần thứ hai của ntziolis answer gần như chính xác nhưng bạn không cần hai trang web hoặc hai hồ bơi ứng dụng. Bạn chỉ cần hai thư mục hệ thống tệp chuyển đổi giữa các thư mục vật lý cho trang web ... nếu bạn đang ở trên một máy chủ duy nhất chứ không phải phía sau trình cân bằng tải hoặc ARR.

Nếu trang web của bạn nằm trên máy chủ web phía sau trình cân bằng tải hoặc ARR thì có hai trang web khác nhau có ý nghĩa, bạn có thể định tuyến các yêu cầu từ trang này đến trang khác và round-robin trên mỗi triển khai.

Rõ ràng nếu có một lượng lớn nội dung do người dùng tạo (các tệp được tải lên và tương tự) thì bạn sẽ ánh xạ một thư mục ảo trong trang web của mình đến một vị trí chung cho dữ liệu này.

Trong triển khai quy mô lớn hơn nơi ứng dụng của bạn đang chạy trên (ví dụ) một môi trường cân bằng tải, bạn có thể thực hiện các triển khai phức tạp hơn.

Đối với câu hỏi liên quan xin vui lòng xem:

How Do I deploy an application to IIS while that web application is running

Publishing/uploading new DLL to IIS: website goes down whilst uploading

Is smooth deployment possible with componentized ASP.NET MVC apps?

+0

có thể chính xác hơn trong phần đầu tiên, kinda interweaved triển khai + tái chế sau khi đọc nó một lần nữa;). Tuy nhiên tôi nghĩ rằng vấn đề của anh ta là mã khởi đầu ứng dụng đắt tiền hơn là triển khai thực tế liên quan, do đó tôi tập trung vào việc thiếu một mô đun khởi động trước IIS 8 – ntziolis

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