2011-02-24 23 views
7

Sé que esto probablemente se haya preguntado antes, pero parece que no puedo encontrar la respuesta correcta para mí.servicio de windows - archivo de configuración

que tienen un servicio de Windows llamado foobar.exe. Tengo un archivo de configuración de la aplicación llamado foobar.exe.config en la misma carpeta.

¿El archivo de configuración solo se lee al inicio?

Me gustaría hacer cambios en el archivo de configuración sin tener que reiniciar el servicio, pero esa es la única forma en que puedo obtener la nueva configuración.

¿Qué estoy haciendo mal?

¿Puede un servicio de Windows tener un archivo de configuración dinámica?

+0

¿Este servicio está escrito en .NET? – Oded

+0

Sí, este es un servicio web .NET –

Respuesta

7

. Las aplicaciones .NET leerán sus archivos de configuración al inicio y los almacenará en caché por motivos de rendimiento.

veo dos formas básicas de todo esto:

  • en su servicio, hacer un seguimiento de la última actualización de la fecha/hora para el archivo de configuración. Compruebe esta última fecha de actualización regularmente y si detecta un cambio, vuelva a cargar el archivo de configuración

  • un servicio de Windows NT puede responder a un evento especial OnCustomCommand. Podría implementar dicho controlador de eventos para volver a cargar la configuración, y cuando cambie la configuración, podría tener una pequeña utilidad para indicar a su servicio que la configuración ha cambiado y enviar ese "comando personalizado" a su servicio

+0

OK, perdona mi ignorancia. Cuando mi proceso detecta que el archivo de configuración ha cambiado, ¿cómo "recargo" la configuración? Estoy usando ConfigurationManager.AppSettings ["SettingName"] en mi código. –

+1

@hobbyman: puede llamar a 'ConfigurationManager.RefreshSection (" appSettings ")' y esa sección se volverá a cargar desde el disco la próxima vez que acceda a ella. Consulte [ConfigurationManager MSDN docs] (http://msdn.microsoft.com/en-us/library/system.configuration.configurationmanager.refreshsection.aspx#Y102) –

2

Asumiendo que su servicio de Windows se escribió con .NET:

archivos de configuración sólo se leen en el arranque. Si cambia los valores en la configuración, deberá reiniciar el servicio para que puedan ser recogidos.

Si desea tener una configuración dinámica, tendrá que implementarla usted mismo: consultar el sistema de archivos para ver si el archivo de configuración cambió y aplicar los cambios.

2

Es posible que tenga que usar FileSystemWatcher. Vea el ejemplo de pseudo-C# -code a continuación.

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) 
{ 
... 
} 
Cuestiones relacionadas