2011-01-17 32 views
6

Tôi phải khởi động lại hoàn toàn ứng dụng khi có bất kỳ phần nào của thay đổi cấu hình của nó. IIS làm tốt nhất để xem cấu hình trong các ứng dụng asp.net, nhưng làm cách nào để khởi động lại các ứng dụng như bàn điều khiển hoặc dịch vụ?Tự động khởi động lại ứng dụng Net khi thay đổi cấu hình

Bạn có thể theo dõi các thay đổi tệp cấu hình bằng FileSystemWatcher và bắt đầu phiên bản ứng dụng mới, đóng ứng dụng hiện tại không?

cái gì đó như:

var file = new FileInfo(AppDomain.CurrentDomain. 
SetupInformation.ConfigurationFile); 

    var watcher = new FileSystemWatch(file.Directory.FullName) 
         { 
          Filter = "...", 
          NotifyFilter = NotifyFilter.LastWrite } 
        ); 

    watcher.Changed += .. // Process.Start(..), current process shutdown 
    watcher.EnableRaisingEvents = true; 

Trả lời

2

Bạn có thể chạy ứng dụng logic thực tế của bạn trong một AppDomain riêng biệt. Tên miền AppDomain ban đầu (hoặc mặc định) sẽ chỉ được sử dụng để (a) bắt đầu một luồng với trình theo dõi hệ thống tệp và (b) bắt đầu logic ứng dụng trong AppDomain riêng biệt. Điều quan trọng là, bạn có thể chuyển một đường dẫn đến tệp cấu hình khi tạo một AppDomain.

Khi bạn xác định thay đổi trong tệp cấu hình, bạn dừng logic ứng dụng của mình tập tin cấu hình.

1

Cấu hình ứng dụng tiêu chuẩn của .NET không cho phép nâng cấp động như xa như tôi biết. Nhưng nếu tôi là bạn, tôi muốn viết lớp cấu hình ứng dụng của riêng tôi đọc xml hoặc bất cứ cấu hình nào, xem các thay đổi của tệp cấu hình này và nếu có gì đó thay đổi, lớp của riêng tôi sẽ tải lại tệp cấu hình một cách động. Nếu điều này là có thể, nó phải thanh lịch hơn nhiều so với giết chết và bắt đầu quá trình mới.

Nếu ứng dụng của bạn không gặp sự cố khi được gọi nhiều lần (có hai trường hợp khi bạn bắt đầu quy trình mới) và bị dừng và nếu thay đổi cấu hình là không thường xuyên, sẽ không có hạn chế trong cách tiếp cận của bạn. Tôi không biết nếu bạn có thể bắt đầu dịch vụ cửa sổ tốt.

+0

Cảm ơn bạn Matten, nhưng tệp cấu hình của riêng tôi sẽ không giúp tôi vì tôi muốn đóng ứng dụng (miễn phí tất cả các tài nguyên của nó, không chỉ để gia hạn dữ liệu cấu hình) –

1

Tôi không chắc chắn về Asp.net nhưng có thể bạn có thể tải ứng dụng của mình trong một AppDomain khác và khi cấu hình thay đổi Tải lại tên miền. Điều này về cơ bản sẽ reinitialize bạn ứng dụng với các thiết lập mới.

Đây là cách bạn có thể đi về nó:

  AppDomainSetup setup = new AppDomainSetup() 
      { 
       ApplicationBase = AppDomain.CurrentDomain.BaseDirectory, 
       // ... maybe more options can go here, inspect the class and see your options 
      }; 

      domain = AppDomain.CreateDomain("MyDomainName", null, setup); 
      domain.UnhandledException += new UnhandledExceptionEventHandler(domain_UnhandledException); 
      MyApplication app = (MyApplication)domain.CreateInstanceFromAndUnwrap("assemblyfilename.dll", "The_Type_Name.MyApplication"); 
      app.Launch(); 
1

Khi trình gỡ lỗi nhớ rằng Visual Studio khởi động XXX.vshost.exe thay vì XXX.exe, vì vậy bạn cần xem một tệp khác khi gỡ lỗi.

FileSystemWatch là một bit dễ sử dụng, bạn cần sử dụng miền ứng dụng thứ 2 để chạy ứng dụng chính của mình hoặc có ứng dụng "trình khởi chạy" hoặc tự động gọi ứng dụng của bạn để gọi Process.Start() khi cần khởi động lại. Kiểm tra lỗi là những gì làm cho khó khăn này ...

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