2011-09-12 42 views
16

Chúng tôi muốn khởi động ứng dụng ASP.NET MVC được lưu trữ trên máy chủ IIS 7.5. Mô-đun khởi động được sử dụng để có sẵn tại http://forums.iis.net/t/1176740.aspx đã bị xóa kể từ lúc nào đó.Làm thế nào để khởi động một ứng dụng ASP.NET MVC trên IIS 7.5?

Ứng dụng phải được khởi động lại mỗi khi khởi động lại quá trình của nhân viên IIS hoặc ASP.NET vì bất kỳ lý do gì. Trong thời gian khởi động, IIS sẽ trả về một số mã trạng thái HTTP biểu thị trạng thái khởi động của nó hoặc không có khả năng phục vụ bất kỳ khách hàng nào.

Việc tạo một tệp thực thi điều hướng thông qua các trang cần thiết trong trang web thông qua HttpRequests có phải là một ý tưởng hay không? Tệp thực thi có thể được kích hoạt từ triển khai IProcessHostPreloadClient. Có thể cấu hình IIS để nó chỉ chấp nhận các yêu cầu từ localhost và một khi thực thi được thực hiện, nó có thể chuyển sang tất cả các máy khách - nhưng công tắc đó sẽ không kích hoạt khởi động lại IIS (rõ ràng).

Có thể sử dụng Visual Studio 2010 - Thử nghiệm hiệu suất web để khởi động ứng dụng thay vì tạo tệp thực thi thủ công không? Bất kỳ lựa chọn thay thế nào khác?

PS: Ứng dụng sử dụng Xác thực biểu mẫu và sử dụng phiên - vì vậy việc duy trì cookie của tiểu bang và các cookie khác là quan trọng.

CẬP NHẬT 1 - Chúng tôi đang sử dụng .NET Framework 4.0 và Entity Framework (cơ sở dữ liệu đầu tiên) trong ứng dụng của chúng tôi. Lần truy cập đầu tiên vào truy vấn EF chậm. Lý do đằng sau sự ấm lên là để có được những lần truy cập đầu tiên trên đường đi. Chúng tôi đã sử dụng các truy vấn được biên dịch ở hầu hết các địa điểm và chúng tôi đã triển khai các chế độ xem được biên dịch trước cho EF. Kích thước của mô hình và ứng dụng là rất lớn và phức tạp. Sự khởi động cần phải đi qua nhiều trang để đảm bảo rằng các truy vấn EF được biên dịch và không biên dịch được thực thi ít nhất một lần trước khi bất kỳ người dùng cuối nào được truy cập vào ứng dụng.

+0

Related: http://stackoverflow.com/questions/13250679/how-to-warm-up-entity-framework-when-does-it-get-cold –

+0

Thử kiểm tra [giải pháp của tôi] (http: // stackoverflow.com/questions/15348621/iis-7-5-application-initialization-for-asp-net-web-service-warmup-without-rema/15367638?noredirect=1#comment33723748_15367638). Nó sẽ không trả lại mã trạng thái đặc biệt, nhưng thay vào đó, hãy đợi khởi động để phản hồi các yêu cầu. – Jason

Trả lời

9

Bạn có thể xem following post cho tính năng Tự động khởi động được tích hợp vào IIS 7.5 và ASP.NET 4.0.

+0

Cảm ơn bạn đã quan tâm đến điều này. Vui lòng kiểm tra "UPDATE 1" trong truy vấn ban đầu để cung cấp thêm ngữ cảnh cho vấn đề. Sử dụng phương pháp được chỉ định trong blog của ScottGu có thể không giúp hoàn thành tất cả các yêu cầu chúng tôi có. Chúng ta cần phải có trang web trực tiếp - nhưng không thể truy cập vào tất cả cho đến khi nó được làm ấm lên. Chúng tôi cần phải đi qua các trang của chúng tôi trước khi cho phép nó được truy cập bởi tất cả. –

+0

@Dhwanil Shah, sự khởi động xảy ra khi IIS bắt đầu chạy, tức là sau khi máy chủ của bạn khởi động lại và nhiều trước khi yêu cầu đầu tiên có thời gian để truy cập ứng dụng của bạn. –

+0

Tôi có thể truy cập các trang trong trang web của tôi từ mã bên trong triển khai IProcessHostPreloadClient không? –

4

Bất kỳ ứng dụng nào tạo yêu cầu máy chủ cho tài nguyên được lưu trữ có thể được sử dụng để làm nóng quá trình IIS. Chính xác có bao nhiêu yêu cầu bạn cần phụ thuộc vào những gì các bộ phận cần khởi động. Thông thường, khởi động được sử dụng cho:

  • Bắt đầu quy trình công nhân. Đối với điều này, bạn chỉ cần yêu cầu một tài nguyên để làm nóng quá trình cho toàn bộ ứng dụng.
  • Thực hiện bất kỳ khởi tạo tĩnh nào, khởi động cơ sở dữ liệu hoặc lưu trước bộ nhớ đệm. Mọi thứ bạn làm trong tệp Global.asax sẽ xảy ra khi bạn thực hiện yêu cầu đầu tiên của mình, vì vậy nếu bạn có thể thực hiện tất cả khởi tạo của mình thì bạn vẫn sẽ chỉ cần thực hiện một yêu cầu trang.
  • Buộc lập trình trước các trang ASP.NET. Để điều này xảy ra, bạn sẽ cần phải truy cập mỗi trang. May mắn thay, điều này thường không tốn nhiều thời gian, vì vậy bạn có thể không cần phải lo lắng về nó. Nếu bạn có các trang riêng lẻ tải chậm, bạn có thể làm ấm chúng một cách riêng biệt.

Quy trình "khởi động" ở đây không phải là điều huyền diệu. Bạn chỉ cần lực lượng IIS để phục vụ các URL trong câu hỏi. Mọi thứ bạn đề cập sẽ quan tâm đến điều đó: sử dụng công cụ kiểm tra căng thẳng để truy vấn URL, viết tiện ích tùy chỉnh để đăng yêu cầu HTTP, thậm chí chỉ cần tạo ra một công cụ như 'wget' hoặc tập lệnh PowerShell để tải xuống URL. .

Theo như hạn chế quyền truy cập vào máy chủ cục bộ, theo như tôi biết, trong IIS, cách duy nhất để thay đổi yêu cầu bạn khởi động lại IIS. Bạn luôn có thể xây dựng một móc yêu cầu trước vào ứng dụng của bạn và duy trì trạng thái ở đó, và yêu cầu một quá trình khởi động truy vấn một số URL cụ thể chuyển đổi trạng thái đó thành "mở".Nhưng tôi không chắc bạn sẽ làm gì. Nếu, bằng cách nào đó, người dùng đã cố gắng truy vấn trang web của bạn trước khi khởi động xong, tất cả điều đó sẽ xảy ra là trang web của bạn sẽ mất nhiều thời gian để phản hồi, sau đó họ sẽ nhận được trang mà họ yêu cầu. Nếu bạn khóa chúng ra khỏi trang web trong thời gian khởi động, thay vào đó, chúng sẽ bị lỗi mạng trình duyệt cho rằng trang web đã ngoại tuyến, điều này (với tôi) có vẻ tệ hơn nhiều.

+3

Bạn có thể biên dịch trước các trang trước khi triển khai (trong xây dựng quy trình), trong đó có một lợi ích bổ sung của việc tìm lỗi không được phát hiện trong quá trình biên dịch C#/VB.NET. –

+0

@Michael - Cảm ơn bạn đã quan tâm đến điều này. Vui lòng kiểm tra "UPDATE 1" để có thêm ngữ cảnh về truy vấn. –

+0

@Jakub - Chúng tôi đang sử dụng ASP.NET biên dịch trước. –

9

Microsoft đã phát hành một mô-đun thực hiện chính xác những gì bạn yêu cầu. Các Application Initialization Module for IIS 7.5 cải thiện sự đáp ứng của các trang Web bằng cách tải các ứng dụng Web trước khi yêu cầu đầu tiên đến.

Bạn có thể chỉ định một chuỗi các Url mà IIS sẽ tải trước trước khi chấp nhận yêu cầu từ người dùng thực. Tôi không nghĩ rằng bạn có thể nhận được một expereince đăng nhập người dùng thực sự, nhưng có lẽ bạn có thể thiết lập các trang mô phỏng mà không yêu cầu đăng nhập mà thực hiện cùng một warmup bạn yêu cầu?

Tính năng tôi cho là hấp dẫn nhất là mô-đun này cũng cho phép tái chế quá trình chồng chéo. following tutorial from IIS 8.0 bao gồm cách tiếp cận từng bước về cách bật tái chế quy trình chồng chéo.

Khi IIS phát hiện rằng một quá trình nhân viên đang hoạt động đang được tái chế, IIS không chuyển lưu lượng hoạt động sang quy trình nhân viên tái chế mới cho đến khi quy trình nhân viên mới kết thúc chạy tất cả Url khởi tạo ứng dụng trong quy trình mới. Điều này đảm bảo rằng khách hàng duyệt trang web của bạn không thấy trang khởi tạo ứng dụng khi ứng dụng đang hoạt động và đang chạy.

Mô-đun khởi tạo ứng dụng IIS này được tích hợp vào IIS 8.0, nhưng là available for download for IIS 7.5.

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