2011-02-24 42 views
7

Tôi biết điều này có thể đã được hỏi trước nhưng tôi dường như không thể tìm thấy câu trả lời đúng cho tôi.cửa sổ dịch vụ - tập tin cấu hình

Tôi có dịch vụ cửa sổ có tên foobar.exe. Tôi có tệp cấu hình ứng dụng có tên là foobar.exe.config trong cùng một thư mục.

Tệp cấu hình chỉ đọc khi khởi động?

Tôi muốn thực hiện thay đổi đối với tệp cấu hình mà không phải khởi động lại dịch vụ nhưng đó là cách duy nhất tôi có thể đọc cài đặt mới.

Tôi đang làm gì sai?

Dịch vụ cửa sổ có thể có tệp cấu hình động không?

+0

Dịch vụ này có được viết bằng .NET không? – Oded

+0

Vâng, đây là dịch vụ web .NET –

Trả lời

7

Các ứng dụng .NET sẽ đọc tệp cấu hình của chúng khi khởi động và lưu trữ chúng vì lý do hiệu suất.

Tôi thấy hai cách cơ bản xung quanh này:

  • trong dịch vụ của bạn, theo dõi các cập nhật mới nhất ngày/thời gian cho các tập tin cấu hình. Kiểm tra ngày cập nhật cuối cùng này thường xuyên và nếu bạn phát hiện thay đổi, hãy tải lại tệp cấu hình

  • dịch vụ Windows NT có thể phản hồi sự kiện OnCustomCommand đặc biệt. Bạn có thể thực hiện một trình xử lý sự kiện để tải lại cấu hình và khi bạn thay đổi cấu hình, bạn có thể có một tiện ích nhỏ để báo hiệu dịch vụ của mình rằng cấu hình đã thay đổi và gửi "lệnh tùy chỉnh" đó tới dịch vụ của bạn

+0

OK, hãy tha thứ cho sự thiếu hiểu biết của tôi. Khi quá trình của tôi phát hiện rằng tệp cấu hình đã thay đổi, làm cách nào để "tải lại" cấu hình? Tôi đang sử dụng ConfigurationManager.AppSettings ["SettingName"] trong mã của tôi. –

+1

@hobbyman: bạn có thể gọi 'ConfigurationManager.RefreshSection (" appSettings ")' và phần đó sẽ được tải lại từ đĩa khi bạn truy cập tiếp theo. Xem [DocumentManager MSDN docs] (http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.refreshsection.aspx#Y102) –

2

Giả sử dịch vụ cửa sổ của bạn được viết bằng NET:

file cấu hình được chỉ đọc lúc khởi động. Nếu bạn thay đổi giá trị trong cấu hình, bạn sẽ cần phải khởi động lại dịch vụ để chúng được chọn.

Nếu bạn muốn có cấu hình động, bạn sẽ cần tự mình thực hiện việc này - bỏ phiếu cho hệ thống tệp để xem liệu tệp cấu hình đã thay đổi chưa và áp dụng các thay đổi.

2

Bạn có thể cần xem xét bằng FileSystemWatcher. Xem ví dụ pseudo-C# -code bên dưới.

private FileSystemWatcher _myWatcher; 

protected override void OnStart(string[] args) 
{ 
_myWatcher = new FileSystemWatcher(); 
_myWatcher.Path = path to config file; 
_myWatcher.Changed += new FileSystemEventHandler(myWatcherFileChanged); 
_myWatcher.NotifyFilter = NotifyFilters.LastWrite; 
_myWatcher.EnableRaisingEvents = true; 

} 

protected override void OnStop() 
{ 
    _myWatcher.EnableRaisingEvents = false; 
} 

private void myWatcherFileChanged(object sender, FileSystemEventArgs e) 
{ 
... 
} 
Các vấn đề liên quan