2011-01-17 12 views
6

Tengo que reiniciar completamente la aplicación cuando cambia alguna parte de la configuración. IIS hace lo mejor para ver la configuración en las aplicaciones asp.net, pero ¿cómo puedo reiniciar aplicaciones como consola o servicios?. Reinicio automático de la aplicación .Net cuando la configuración cambia

¿Está bien controlar los cambios del archivo de configuración con FileSystemWatcher y comenzar una nueva instancia de aplicación, cerrando la actual?

algo como:

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; 

Respuesta

2

Se puede ejecutar la lógica de aplicación real en un dominio de aplicación separada. El AppDomain inicial (o predeterminado) solo se usaría para (a) iniciar un hilo con el vigilante del sistema de archivos y (b) iniciar la lógica de la aplicación en el Dominio de la aplicación por separado. La clave es que puede pasar una ruta a un archivo de configuración al crear un Dominio de aplicación.

Cuando identifica un cambio en el archivo de configuración, detiene su lógica de aplicación (lo que eso implique en su caso - ¡y esta es la parte más complicada!) Y descarga el AppDomain, luego reinícielo, que usará la actualización archivo de configuración.

1

La configuración de la aplicación estándar de .NET no permite actualizaciones dinámicas por lo que yo sé. Pero si fuera usted, preferiría escribir mi propia clase de configuración de aplicaciones que lea un xml o cualquier configuración, observar los cambios de este archivo de configuración y si algo cambiara, mi propia clase recargaría dinámicamente el archivo de configuración. Si esto es posible, debería ser mucho más elegante que matar e iniciar nuevos procesos.

Si su aplicación no tiene problemas para ser llamada varias veces (hay dos instancias cuando inicia el nuevo proceso) y se detiene, y si los cambios de configuración son poco frecuentes, no debería haber ningún inconveniente en su enfoque. No sé si puede iniciar servicios de Windows con buena voluntad.

+0

Gracias Matten, pero mi propio archivo de configuración no me ayudará porque quiero cerrar la aplicación (liberar todos los recursos que tiene, no solo para renovar los datos de configuración) –

1

No estoy seguro acerca de Asp.net pero quizás podría cargar su aplicación en un Dominio de aplicación diferente y cuando la configuración cambie Recargue el dominio. Esto básicamente reiniciará su aplicación con la nueva configuración.

Aquí es cómo se puede ir sobre ella:

  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

Cuando el depurador recuerda que Visual Studio inicia XXX.vshost.exe en lugar de XXX.exe, por lo que debe mirar un archivo diferente al depurar.

FileSystemWatch es la parte más fácil, necesita usar un segundo dominio de aplicación para ejecutar su aplicación principal o tener una aplicación "iniciadora", o hacer que su aplicación llame a Process.Start() en sí mismo cuando sea necesario. reiniciar. La comprobación de errores es lo que hace que esto sea difícil ...

Cuestiones relacionadas