2015-01-14 2 views
7

В качестве первого шага я создал проект службы Windows настроен, он правильно иC# Topshelf TimeoutException

На втором шаге я добавил TopShelfВерсия 3.1.135.0 в моем проекте Если я бегу мое обслуживание через (F5 Run), затем он загружает Консоль верхнего уровня, и сервис завершается успешно.

Однако, когда я запускаю его для установки и запускаю его из командной строки, у меня ниже TimeOut Error.

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"); 

     } 
    } 

- Обновлен код, чтобы устранить эту проблему

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(); 
} 

Любые предложения? Time Out Error

+0

Что делает 'AppService.Start()' do? –

+0

Я добавил для этого код. Но проблема в том, что если я запускаю из службы VS F5, правильно выполняет работу, только когда я устанавливаю и запускаю ее, я получаю TimeOut Error – sandeeMPS

+0

. Процесс извлечения считывает файл из сети и загружается в базу данных. – sandeeMPS

ответ

12

Эта ошибка происходит из-за того, что вы запускаете методы извлечения и обработки в методе «Пуск» службы. Это нормально в Visual Studio, но когда вы устанавливаете сервис и запускаете его, диспетчер управления службам ожидает возврата метода Start, и если он не сделает этого в течение определенного времени (по умолчанию 30 секунд), он вернется эта ошибка.

У вас есть несколько вариантов, каждый из которых позволит метод Start, чтобы вернуться сразу:

  1. Invoke экстракт и трансформируют методы в отдельном потоке
  2. Invoke экстракт и трансформируют методы асинхронно
  3. Используйте таймер для запуска процесса извлечения и преобразования
+0

Спасибо, я исправил его, как вы предложили. См. мое обновление. я следую лучшей практике? – sandeeMPS

+0

У меня все хорошо. Вы можете сделать это без ThreadStart, но это не наносит вреда. – stuartd

Смежные вопросы