Pregunta

¿Hay una manera de establecer un valor diferente para el tiempo de espera de inicio de servicio por servicio? Puedo cambiarlo usando la clave de registro ServicesPipeTimeout, pero es por máquina ( http://support.microsoft.com/ kb / 824344 ).

En este momento, lo único en lo que pensé fue en hacer todas las acciones de inicio que llevan mucho tiempo en un hilo diferente.

¿Fue útil?

Solución

Es una buena práctica terminar de comenzar su servicio lo más rápido posible. Por lo tanto, durante el estado start , haga solo lo que necesita para reconocer que se inició correctamente; y haz el resto mas tarde. Si el inicio sigue siendo un proceso largo, use SetServiceStatus periódicamente para informar al Administrador de control de servicios que aún no ha finalizado, por lo que no se agota el tiempo de espera del servicio.

Otros consejos

Estoy de acuerdo con Romulo en terminar para comenzar su servicio lo antes posible. Sin embargo, si necesita el tiempo y está utilizando .NET Framework 2.0 o posterior, podría considerar el método ServiceBase.RequestAdditionalTime ().

http://msdn.microsoft.com /en-us/library/system.serviceprocess.servicebase.requestadditionaltime.aspx

protected override void OnStart()
{
    this.RequestAdditionalTime(10000);
    // do your stuff
}

Simplemente haz cosas que requieran mucho tiempo en otro hilo

   protected override void OnStart(string[] args)
    {
        var task = new Task(() =>
        {
            // Do stuff
        });
        base.OnStart(args);
        task.Start();
    }

También tuve que lidiar con un servicio que puede tomar unos segundos / minutos para tener un buen comienzo. Cuando se inicia el servicio, intenta conectarse a un servidor SQL. Sin embargo, cuando se reinició todo el servidor, mi servicio se estaba iniciando ANTES de SQL Server. (Sé de la dependencia del Servicio, pero no se aplica a mi situación por una razón particular ...). Intenté hacer un bucle intentando 10 veces para conectarme a SQL Server, pero Windows estaba cancelando mi servicio antes del segundo intento, debido al Timeout.

Mi solución : agregué un temporizador en el " onStart () " de mi servicio Luego, el " onTick () " El método del servicio intentaba 10 veces conectarse al servidor SQL (con una espera de 30). No más tiempo de espera en el inicio.

Así que básicamente,

  • Mi servicio comienza en 5 segundos.
  • Se inicia un temporizador 10 segundos después de que el servicio es comenzado.
  • El temporizador intenta 10 veces [esperando 30 segundos cada vez] para conectarse al servidor SQL.
  • Si tiene éxito, el temporizador se deshabilitará, si no (después de 10 intentos), detengo el servicio.

Observe la forma más elegante de resolver el problema, pero tal vez alguna parte de mi solución pueda ayudar a alguien en la misma situación que a mí,

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top