2015-01-14 52 views
7

come primo passo ho creato progetto di servizio Windows configurato correttamente eC# TopShelf TimeoutException

Sul secondo gradino ho aggiunto TopShelfversione 3.1.135.0 nel mio progetto Se eseguo il mio servizio attraverso (F5 Run) e poi sta caricando la console Top-shelf e il servizio è stato completato con successo.

Tuttavia quando lo eseguo per l'installazione e avvio dal prompt dei comandi che ho sotto Errore TimeOut.

Topshelf.Hosts.StartHost Error: 0 : The service failed to start., System.Service 
Process.TimeoutException: Time out has expired and the operation has not been co 
mpleted. 



public class AppService 
    { 
     LoggingService loggingService = new LoggingService(typeof(AppService).Name); 


     public void Start() 
     { 
      loggingService.Info("SampleService is Started"); 
      ExtractProcess.Start(); 
      TransformProcess.Start(); 

     } 

     public void Stop() 
     { 
      loggingService.Info("SampleService is Stopped"); 

     } 
    } 

- Aggiornato codice per risolvere questo problema

public void Start() 
    { 
     loggingService.Info("MPS.GOA.ETLService is Started"); 
     ThreadStart myThreadDelegate = new ThreadStart(StartService); 
     Thread myThread = new Thread(myThreadDelegate); 
     myThread.Start(); 

    } 

private void StartService() 
{ 
    timer.Elapsed += new System.Timers.ElapsedEventHandler(OnElapsedTime); 
    timer.Interval = 60000 * ServiceIntervalInMinutes;  //1 minute 60000 milliseconds 
    timer.Enabled = true; 
    Process(); 
} 

private void Process() 
{ 
    ExtractProcess.Start(); 
    TransformProcess.Start(); 
} 

qualche suggerimento? Time Out Error

+0

Cosa fa 'AppService.Start()'? –

+0

Ho aggiunto il codice per questo. Ma il problema è che se corro dal servizio VS F5 fa il lavoro correttamente è solo quando installo ed eseguo mi dà errore TimeOut – sandeeMPS

+0

processo di estrazione legge un file dal percorso di rete e carica nel database – sandeeMPS

risposta

12

Questo errore si verifica perché si sta eseguendo l'estrazione e i metodi di elaborazione nel metodo di avvio del servizio. Questo va bene in Visual Studio, ma quando si installa il servizio e lo si avvia, Gestione controllo servizi attende il ritorno del metodo di avvio e, se non lo fa entro un determinato periodo (30 secondi per impostazione predefinita), verrà restituito questo errore

Sono disponibili diverse opzioni, tutte che permetteranno il metodo Start per tornare subito:

  1. invocare l'estratto e trasformare i metodi su un thread separato
  2. invocare l'estratto e trasformare i metodi in modo asincrono
  3. Utilizzare un timer per avviare il processo di estrazione e trasformazione
+0

Grazie, ho risolto come suggerito Si prega di vedere il mio aggiornamento sto seguendo le migliori pratiche? – sandeeMPS

+0

Mi sembra a posto. Potresti farlo senza il ThreadStart, ma non sta facendo alcun danno. – stuartd

Problemi correlati