2010-02-18 14 views
6

Chúng tôi có một hệ thống mà chúng tôi lưu trữ một vài ứng dụng WCF trong IIS. Một số ứng dụng này có thời gian khởi động kéo dài mất vài giây (nhiều hơn một người dùng sẽ rất vui khi chờ). Một khi nó đã hoạt động, mọi thứ đều rất vui, vì vậy nó thực sự chỉ là thời gian khởi động.Làm thế nào để: Tránh các vấn đề Cold-Start với IIS lưu trữ các ứng dụng WCF?

Khách hàng cũng có yêu cầu tái chế các hồ bơi ứng dụng mỗi đêm.

Có cách nào để đánh thức tất cả các dịch vụ này để thời gian khởi động không phải là vấn đề đối với người dùng đầu tiên của hệ thống không?

Những suy nghĩ ban đầu để viết một dịch vụ cửa sổ chỉ đơn giản gọi một phương thức nhẹ trên mỗi dịch vụ sau mỗi phút x (có thể cấu hình) để giữ ứng dụng hoạt động, nhưng vì chúng ta đang ở trong môi trường cân bằng tải và ứng dụng cần máy chủ cụ thể các tiêu đề được thông qua, chúng tôi sẽ luôn truy cập vào địa chỉ cân bằng tải có nghĩa là không có cách nào để chúng tôi đảm bảo rằng tất cả các dịch vụ trên tất cả các hộp trong cụm đều thực sự bắt đầu.

Vì một ứng dụng wcf duy nhất trong IIS chỉ có thể có một tiêu đề máy chủ duy nhất, cách duy nhất khác là thiết lập trang web thứ hai chỉ vào cùng một ứng dụng. Tôi chỉ không chắc chắn nếu điều đó sẽ làm các trick vì nó sẽ được trong một bối cảnh máy chủ.

tùy chọn khác có thể là xóa một số thứ như phần mở rộng cho IIS (không chắc chắn nếu điều này có thể) có thể gọi mỗi dịch vụ của chúng tôi khi IIS hoặc nhóm ứng dụng thực sự khởi động lại. (Cái gì mà chú ý khi các hồ bơi ứng dụng đã tái chế nhưng trước khi yêu cầu người sử dụng đầu tiên.

Bất kỳ ý tưởng sẽ được nhiều đánh giá cao.

Cảm ơn

Gineer

+1

IIS7 có tính năng được gọi là Ứng dụng khởi động hoặc tương tự. –

Trả lời

2

Đối với những người trong chúng ta đang chạy trên một phiên bản của IIS trước 7.5, chúng tôi đang trong quá trình thử nghiệm các giải pháp sau đây ...

Như đã đề cập trong các bài bản gốc, ý tưởng ban đầu là để kích hoạt WebRequest từ một dịch vụ chạy trên mỗi máy đến các trang web cục bộ (lưu trữ các dịch vụ WCF), nhưng điều này là không thể, vì tất cả chúng đều sử dụng các tiêu đề Host, và tất cả chúng đều nằm trong một trang web cân bằng tải mạng .

Sau đó chúng tôi nghĩ rằng chúng tôi có thể chỉ đơn giản cung cấp tiêu đề máy chủ tùy chỉnh trong yêu cầu web cho máy chủ cục bộ.

Tắt, bạn không thể cập nhật tên tiêu đề máy chủ trong WebRequest. Đó là trường Chỉ đọc.

Lộn xộn với lớp proxy làm cho nó hoạt động. Xem: http://social.msdn.microsoft.com/forums/en-US/netfxnetcom/thread/1b35c665-fe32-4433-8877-a62f2d400a8e/

Và một đoạn ngắn của mã thử nghiệm của tôi bên dưới trong C#.

 WebRequest req = WebRequest.Create("<Correct Host name>"); 
     req.Proxy = new WebProxy("127.0.0.1"); 

     StreamReader stream = new StreamReader(
      req.GetResponse().GetResponseStream()); 

     StringBuilder sb = new StringBuilder(); 

     String LineString; 

     while ((LineString = stream.ReadLine()) != null) 
     { 
      if (LineString.Length > 0) 
       sb.Append(LineString); 
     } 
     stream.Close(); 

     String response = sb.ToString(); 

Đây có thể không phải là mục đích của lớp proxy, nhưng dường như nó hoạt động theo một trong hai cách.

Gineer

Ps. Không, bạn không cần phải có bất kỳ máy chủ proxy thực tế nào được cài đặt trên máy chủ lưu trữ cục bộ.

3

Cảm ơn Dercsár. Tuyệt vời.

Sau khi nhanh chóng Google, tôi đã tìm thấy arcticle sau đây về chủ đề: Using the IIS Application Warm-Up Module

Những hạn chế ở đây là điều này chỉ có sẵn trên Windows 2008 R2 với IIS 7.5. Mặc dù khách hàng của chúng tôi đang trong quá trình nâng cấp lên Win 2K8R2, nhưng điều này vẫn có thể mất một chút thời gian.

Có ai biết giải pháp nào có thể làm việc cho Windows 2003 với IIS 6 hay chúng ta phải viết một cái gì đó làm công việc này?

Gineer

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