2012-03-06 8 views
7

A có một webrole azure với một trang thử nghiệm và một dịch vụ trong vai trò đó. Sau khi xuất bản vai trò, nó không tự động bắt đầu, chỉ khi sử dụng lần đầu tiên. Vì vậy, nếu vai trò bị tắt vì lý do nào đó, lần sử dụng đầu tiên sau đó là khá chậm.Tự động khởi động webrole Azure sau khi triển khai

Có cách nào để làm cho webroles bắt đầu tự động ngay sau khi chúng được triển khai (lần đầu tiên hoặc sau khi di chuyển) không?

+1

Câu trả lời Stackoverflow sau đây cho biết cách thực hiện điều này trong IIS 8 (Windows Server 2012) bằng cách sử dụng tính năng khởi tạo ứng dụng: http://stackoverflow.com/questions/13237393/automatically-install-application-initialization-in-azure- web-role-sdk-v1-8-wi –

Trả lời

5

Khám phá auto start feature of IIS 7.5. Hãy chắc chắn rằng bạn đặt osFamily = "2" cho webrole để nó sử dụng hệ điều hành Windows 2008 R2.

Chỉnh sửa: Chúng tôi vẫn bị kẹt trên osFamily = "1" vì lý do kỹ thuật, vì vậy, chúng tôi chưa thể triển khai chức năng tự động khởi động. Tuy nhiên, dưới đây là các bước bắt buộc để thiết lập tự động bắt đầu:

  1. Tạo nhà cung cấp tự động bắt đầu thực hiện IProcessHostPreloadClient interface. Đã từng là nhà cung cấp mặc định có tên là Application Warm-Up Module nhưng không có sẵn để tải xuống nữa. Bạn có thể sử dụng .Net Reflector để xem nội dung của Microsoft.ApplicationServer.Hosting.AutoStart.ApplicationServerAutoStartProvider.dll như là một ví dụ thực hiện. Dll này được bao gồm trong Windows Máy chủ (không phải Azure) AppFabric.

  2. Bước tiếp theo là chỉ định cài đặt chính xác trong applicationHost.config của bạn. Một số biến thể của mã được liệt kê here có thể được nhập vào lớp RoleEntryPoint của bạn để nó được gọi khi vai trò Azure của bạn kích hoạt.

Vui lòng cho cộng đồng biết nếu bạn tạo thành công nhà cung cấp tự động bắt đầu của riêng mình. Tại thời điểm này, không có nhiều thông tin về việc triển khai IProcessHostPreloadClient trên internet.

+0

@Atesz - Sự kết hợp giữa câu trả lời của tôi và David Makogon sẽ cung cấp cho bạn những gì bạn cần. –

+0

Điểm tốt trên osFamily, mặc định là "1" (Windows 2008 SP2). –

+0

Như tôi thấy, bạn phải làm phép thuật này trên máy chủ, hoặc tôi đang thiếu cái gì đó? Điều gì xảy ra nếu ứng dụng của tôi được di chuyển sang một máy mới? Tôi phải làm lại lần nữa? Bạn không thể làm điều đó thông qua Azure (ServiceDefinition có một thẻ Startup, nơi tôi bắt đầu sricpt được đề cập bởi David)? Tôi hơi bối rối ở đây. [Nguồn tự động IIS của tôi] (http://weblogs.asp.net/scottgu/archive/2009/09/15/auto-start-asp-net-applications-vs-2010-and-net-4-0 -series.aspx) –

2

Vai trò thường được khởi động lại khoảng mỗi tháng một lần, để bảo trì hệ điều hành của Máy khách hoặc Hệ điều hành chủ cơ bản. Những gì bạn có nhiều khả năng thấy là thời gian chờ của AppPool do không hoạt động, điều này sẽ thể hiện cùng loại trì hoãn lần truy cập ban đầu. Thời gian chờ mặc định là 20 phút. Bạn có thể thay đổi thời gian chờ thông qua kịch bản khởi động cao, với một cái gì đó như:

%windir%\system32\inetsrv\appcmd set config -section:applicationPools -applicationPoolDefaults.processModel.idleTimeout:00:00:00 

tôi đã thảo luận này trong another SO question là tốt.

+0

+1 Quên đề cập đến thiết lập thời gian chờ AppPool mặc dù chúng tôi vô hiệu hóa thời gian chờ trong ứng dụng của chúng tôi.: P –

+0

Tôi biết về thời gian chờ của AppPool và nó bị tắt (với cùng một tập lệnh bạn đề cập đến). Nhưng đôi khi nó vẫn tắt. Mọi ngoại lệ đều được xử lý, do đó, nó không thể là một vấn đề. Có thể bảo trì, đó là lý do tại sao tôi muốn bắt đầu lại dịch vụ ngay sau khi được triển khai lại. –