2009-07-17 21 views
5

Có ai có mẫu về cách vá ứng dụng asp.net đang chạy không? Kịch bản tôi đang hình dung là ứng dụng có thể tìm đến một máy chủ trung tâm đã biết cho các phiên bản mới hơn. Tải xuống các tệp mới hơn về vị trí tạm thời và sau đó tự vá.Làm thế nào để tự động vá một ứng dụng ASP.NET đang chạy?

Các vấn đề mà tôi có thể thấy là mọi thay đổi tệp sẽ được trình theo dõi tệp thu thập và tải lại miền ứng dụng sẽ ngừng quá trình vá hiện tại. Tôi nghĩ rằng mỗi tệp được viết sẽ kích hoạt tải lại ứng dụng.

+0

'cái thẻ monkeypatching' là không thích hợp - đó là cái gì khác hoàn toàn –

+0

Cảm ơn. Nhấp vào nó do nhầm lẫn. Có nghĩa là "vá" –

Trả lời

3

Trừ khi bạn đang thực hiện một số tệp đang xem trên các tệp cụ thể, bạn có thể cập nhật tệp aspx hiện có mà không cần bất kỳ ứng dụng nào bị chậm lại. Lần tiếp theo người dùng làm mới trình duyệt, họ sẽ thấy cập nhật trang. Hãy cẩn thận, nếu bạn đã thêm các điều khiển máy chủ bổ sung vào trang và DLL chưa được cập nhật, bạn sẽ gặp sự cố.

Nếu bạn cập nhật tệp web.config hoặc DLL cho ứng dụng, điều này sẽ kích hoạt tải lại quy trình nhân viên ASPNET và bất kỳ người dùng mới nào sẽ bị "trễ đầu tiên" mà bạn thường có thể mong đợi.

Nếu bạn đang lo lắng về quá trình này, và có thể đủ khả năng một chút "thời gian xuống" Tôi muốn đề nghị bạn tạo một kịch bản nào sau đây:

  1. Tải lên một file có tên app_offline.htm để gốc của ứng dụng web. IIS sẽ ngay lập tức thấy tệp này và chuyển hướng người dùng đến tệp đó và không thực hiện bất kỳ quá trình xử lý .NET nào. Bạn thậm chí có thể giữ một tệp có tên App_Offline_Disabled.htm trong thư mục gốc và chỉ cần đổi tên nó khi thời gian là đúng.

  2. Sao chép tất cả các tệp của bạn cần được cập nhật, ghi đè/đổi tên/sao chép nếu cần.

  3. Xóa (hoặc đổi tên) tệp App_Offline.htm của bạn để IIS sẽ bắt đầu hướng người dùng đến ứng dụng đã cập nhật. Nếu bạn đang xem tập lệnh chạy, bạn thậm chí có thể tự mình truy cập trang web để nhận hình phạt "tải đầu tiên" để người dùng cuối của bạn sẽ thấy mọi thứ đẹp và sắc nét như mọi khi.

Một lần nữa, tôi không biết liệu quá trình này có thể dễ dàng viết để cung cấp quy trình loại tự động tốt hay không.

+0

Tôi quên mất app_offline.htm. Điều đó có thể sẽ làm các trick. –

+0

Chỉ cần nhớ để thêm một số lượng đáng kể văn bản vào tập tin (cần phải lớn hơn 512 byte nếu bộ nhớ phục vụ) để ngăn chặn các lỗi thân thiện trong IE gây nhầm lẫn về phía người dùng. –

3

Bạn có ý nghĩa gì khi vá?

Nếu bạn muốn cập nhật, bạn có thể chỉ cần sao chép các tệp cập nhật vào thư mục ứng dụng. Các yêu cầu hiện đang hoạt động sẽ được phân phối đầy đủ bằng phiên bản được biên dịch cuối cùng của ứng dụng của bạn, sau đó nó sẽ được biên dịch lại để phục vụ các yêu cầu hậu quả. Không có gì đặc biệt được yêu cầu thực sự.

+0

Quan tâm của tôi là một "bản vá" có thể chứa hàng trăm tệp. Nếu ứng dụng đang tải xuống các tệp và ghi đè lên thư mục riêng của nó/bin và các thư mục nội dung, tôi mong đợi miền ứng dụng sẽ tái chế nhiều lần. Những gì tôi đang cố gắng làm là trì hoãn việc khởi động lại miền ứng dụng cho đến khi tất cả các tệp mới được đặt ra. –

+0

Chỉ cần tải chúng xuống thư mục tạm thời và ghi đè từ đó? Tập tin sao chép từ một thư mục này sang thư mục khác cùng một ổ đĩa là khá nhanh ngay cả đối với hàng trăm tệp - chắc chắn nhanh hơn bất kỳ biên dịch lại nào sẽ là cho một ứng dụng có kích thước đó. –

0

Tôi không biết cách tự động nào để thực hiện việc này. Có vẻ như sẽ dễ dàng hơn khi chỉ dựa vào tập lệnh xây dựng tự động sẽ đẩy các thay đổi tới (các) máy chủ của bạn.

Nếu bạn giữ trạng thái phiên trong quy trình bên ngoài, bạn có thể cập nhật trang web (điều này sẽ gây ra việc biên dịch lại) mà không cần người dùng của bạn bị loại bỏ. Họ sẽ chỉ trải qua thời gian tải lâu hơn khi họ chờ để biên dịch lại.

+0

Điều này sẽ là cho một sản phẩm thương mại được bán cho người khác vì vậy tôi sẽ không có cách nào để đẩy các thay đổi thông qua một kịch bản xây dựng. Những gì tôi đang tìm kiếm là một cách để cung cấp các bản cập nhật cho phiên bản mới nhất tương tự như các ứng dụng ClickOnce. Tôi nghĩ rằng vấn đề có thể quá sâu trong thời gian chạy ASP.NET để làm việc xung quanh. –

0

Tôi chỉ kiểm tra thông tin phiên bản khi sự kiện trình thu thập dữ liệu được cập nhật. Nếu phiên bản lắp ráp khác với hội đồng hoạt động bạn đang xem xét vá thì bạn tiến hành sao chép. Nếu không thì chỉ cần bỏ qua sự kiện. Ngoài ra câu hỏi sẽ là lý do tại sao bạn sẽ được sao chép vào thư mục tạm thời mà các tập tin đang được retreived từ khi không có một phiên bản thực tế thay đổi?

+0

Trình theo dõi tệp nằm bên trong thời gian chạy asp.net. Tôi không tạo ra nó và tôi không nghĩ rằng tôi có thể bỏ qua các sự kiện. –

+0

Vì vậy, bạn có sử dụng filewatcher thậm chí để "biết" khi sao chép các tập tin mới hoặc bạn đang nói về bản chất của khuôn khổ để cập nhật một dll khi nó sao chép vào thư mục bin? – Achilles

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