2009-01-02 28 views

Trả lời

12

Nếu đây là .NET 2.0 hoặc cao hơn, bạn có thể thêm vào tệp "App_offline.htm", thực hiện yêu cầu tới máy chủ, xóa nó và sau đó thực hiện một yêu cầu khác tới máy chủ.

Chuỗi sự kiện này sẽ buộc ASP.NET dỡ ứng dụng miễn là tệp app_offline.htm tồn tại trong thư mục.

blog entry Scott Guthrie về nó: http://weblogs.asp.net/scottgu/archive/2005/10/06/426755.aspx

+0

không htis chỉ mất hệ thống offline. Tôi muốn nó khởi động lại/tải lại với bộ nhớ cache sạch/phiên và muốn. khi tôi xóa app_offline.htm, thao tác này sẽ sao lưu nó theo mặc định? – MikeJ

+0

@MikeJ - no. Nó tắt ứng dụng và dỡ miền ứng dụng khỏi máy chủ cho đến khi tệp bị xóa. –

+3

@MikeJ - Cũng xin lưu ý rằng đây KHÔNG phải là một thay đổi có lập trình. Bạn sẽ cần phải thể chất thêm và loại bỏ các tập tin cho nó để làm việc –

6

Bạn cũng có thể dừng và bắt đầu Hồ bơi ứng dụng được liên kết với ứng dụng.

+0

nhưng đây là quyền của IIS. trong một số trường hợp tôi có thể không có quyền truy cập vào hộp IIS vì vậy tôi đang tìm một cái gì đó có lập trình. – MikeJ

+1

Bạn có thể tái chế nhóm ứng dụng bằng WMI: http://blogs.iis.net/chrisad/archive/2006/08/30/Recycling-Application-Pools-using-WMI-in-IIS-6.0.aspx – Portman

+0

. tôi không biết rằng – MikeJ

22

Chạm web.config từ bên trong một ứng dụng là một ý tưởng tồi, IMO. Ngoài ra, ý tưởng của việc có một tập tin mà bạn sửa đổi là một chút hackney, IMO.

Các tài liệu cụ thể nói rằng UnloadAppDomain sẽ đóng ứng dụng xuống:

UnloadAppDomain cho phép tắt máy tính chương trình của các ứng dụng không sử dụng.

Bạn sẽ có thể thực hiện cuộc gọi này ở bất kỳ đâu trong ứng dụng. Hãy nhớ rằng, bạn có thể nhận được SecurityException, vì vậy hãy đảm bảo rằng thời gian chạy cung cấp cho bạn các quyền thích hợp (bạn có thể muốn đưa nó vào thư viện và thực hiện cuộc gọi và sau đó đặt thư viện trong GAC bằng chứng.).

+2

có. đây là lý do tôi hỏi. sửa đổi web.config dường như xấu xí và có khả năng để chúng tôi viết lên trên thedailyWTF.com :) – MikeJ

+2

Tôi nghĩ rằng một dòng tốt hơn để báo giá sẽ là: "Chấm dứt các ứng dụng hiện tại. Ứng dụng khởi động lại trong thời gian tới một yêu cầu được nhận cho nó." Phần "không sử dụng" trong báo giá đó có thể được đọc là "sẽ chỉ tắt nếu không có ai đang sử dụng nó", đó không phải là trường hợp. –

+2

Sử dụng System.Web.HttpRuntime.UnloadAppDomain() –

0

Nếu bạn không muốn dừng và bắt đầu nhóm ứng dụng, bạn luôn có thể tái chế nó.

2

Bạn có thể khởi động lại ứng dụng web một cách an toàn bằng cách tạo hoặc đổi tên thư mục vào thời gian chạy theo thư mục ứng dụng. Rõ ràng bạn cần cung cấp cho người dùng được gán để chạy ứng dụng "sửa đổi" các quyền đối với thư mục web hoặc tới một thư mục con bên dưới nó.

phương pháp được đề cập tại http://www.bartlannoeye.be/blog/restarting-a-.net-web-application-without-restarting-iis

tôi đã sử dụng đoạn mã sau để làm điều đó trong trường hợp của tôi. Sửa đổi nó để hoạt động trên thư mục con "có thể ghi"

protected void RestartButton_Click(object sender, EventArgs e) 
{ 
    //restart web app (instead of iisreset) 
    DirectoryInfo dir = new DirectoryInfo(Server.MapPath("restart")); 
    if (dir.Exists) 
    { 
     Directory.Move(dir.FullName, dir.FullName + "ed"); 
    } 
    else 
    { 
     DirectoryInfo dired = new DirectoryInfo(Server.MapPath("restarted")); 
     if (dired.Exists) 
     { 
      Directory.Move(dired.FullName, dir.FullName); 
     } 
     else 
     { 
      Directory.CreateDirectory(dir.FullName); 
     } 
    } 
} 
+0

cũng không hoạt động với tôi. Tôi thấy thư mục đang được tạo nhưng sự kiện application_Start không được gọi! – KMX

+0

Liên kết Bart Lannoeye đó dường như đã chết – brennanyoung

7

mã này hoạt động cho tôi. chỉ cần gọi nó để tải lại ứng dụng.

System.Web.HttpRuntime.UnloadAppDomain(); 

Read more

Phương pháp này sẽ chỉ dỡ bỏ ứng dụng của chúng tôi.Nếu bạn chỉ cần đặt phương pháp này trong một nút web ASP.NET bạn hoàn toàn được thực hiện. Vì vậy, khi nào ứng dụng của chúng tôi sẽ được tải lại? Trên thực tế, nếu bạn nhấp vào nút của bạn, trước tiên nó sẽ khởi chạy phương thức của chúng tôi và tải ứng dụng. Hơn nữa trên trang web chúng tôi đang ở tại thời điểm đó cũng sẽ được tải lại, bởi vì chúng tôi chỉ cần nhấp vào một nút và trang web sẽ làm mới. Sau khi khởi chạy phương thức của chúng tôi, quy trình làm mới trang cũng sẽ khiến ứng dụng của chúng tôi tải lại.

+0

Dường như hoạt động tốt và chắc chắn là giải pháp đơn giản nhất được đưa ra ở đây! –

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