2012-06-28 21 views
10

¿En qué orden para el método las llamadas suceden en un servicio de Windows? Estamos teniendo un problema de tiempo y creo que es debido a que el constructor tarda demasiado en completar el procesamiento.Orden de método Llamadas en un servicio de Windows

Se trata de un problema similar que creo que estamos teniendo Error 1053 the service did not respond to the start or control request

Sin embargo, estamos maravilla en qué orden y cuando los métodos principal, OnStart, InitializeComponent etc consiguen llamados y/o cuándo deben ser llamados.

Además, ¿sería el método OnStart el mejor lugar para poner todo el procesamiento?

** Solución

hecho algunos tiempo para hacer un servicio de prueba y se ensayaron las respuestas a continuación, y se informó el tiempo de espera está llegando desde el proceso de los métodos principales, así como el constructor que se llama en el método Main haciendo que se a tiempo de espera Mover todo al OnStart y simplemente hacer girar un hilo pareció funcionar. Detalles aquí. http://www.adamthings.com/post/2012/06/28/error-1053-the-service-did-not-respond-to-the-start-or-control-request-in-a-timely-fashion/

+0

OnStart debe iniciar otro hilo que maneje todo su procesamiento, por lo que el método puede regresar inmediatamente. En mi experiencia, esto funciona mejor. No pondría nada en InitializeComponent. – Mangist

+0

OnStop debe abortar el hilo y esperar a que se complete :) – Mangist

+1

Puede averiguar colocando puntos de corte. – usr

Respuesta

6

No bloquee en el método OnStart(). Parece que estás haciendo esto.

Cree una secuencia separada en el método OnStart() y salga de allí.

No he probado esto, pero algo similar a:

protected override void OnStart(string[] args) 
{ 
    var worker = new Thread(DoWork); 
    worker.IsBackground = false; 
    worker.Start(); 

    base.OnStart(args); 
} 

private void DoWork() 
{ 
    while (!_stopRequested) // (set this flag in the OnStop() method) 
    { 
     // processing goes here 
    } 
} 

Para responder a su pregunta sobre el orden de los acontecimientos, las declaraciones del rastro acaba de configuración en cada método. No estoy seguro de lo útil que será. El mensaje (El servicio no respondió a la solicitud de inicio ...) que está recibiendo indica que está bloqueando (o tardando demasiado) en un método que debe ejecutarse de manera relativamente rápida.

+0

Esto fue de gran ayuda para hacer que mis pensamientos se movieran. Gracias por la respuesta. Publiqué mis hallazgos en los comentarios en la publicación original. – Adam

6

creo que el orden es

En cuanto a dónde colocar su código, sugeriría poner cualquier código que pueda almacenarse en caché en el Main, y cualquier código que se recicle en cada inicio dentro de OnStart. Sin embargo, no debe hacer ningún procesamiento real en OnStart, solo la inicialización. Use un hilo separado para hacer la mayor parte de su lógica.

Además, el MSDN is helpful with this

+0

Gracias por la respuesta fue útil. Publiqué mis hallazgos en los comentarios en la publicación original. – Adam

Cuestiones relacionadas