2017-02-15 44 views
0

Я анализируя мой (в отставке) со-воркер окно исходного приложения (C#)Как я могу отладить или ловить окно обслуживание исключения

Когда я нажимаю кнопку запуска службы в приложении, что сервис обратился старт, но Через 2-3 секунды он прекратился. Итак, я проверил вход в Event Viewer, и у него есть некоторые проблемы.

Процесс завершается

System.Data.SqlClient.SqlException.

Поэтому я пытаюсь найти причину, но я не знаю, как я могу это сделать.

Сначала я пытался использовать отладчик процесса в Visual Studio,

Но я уже говорил ранее, процесс остановлен в течение всего 2-3 секунд, поэтому, It`s невозможно ...

Как я могу проверить ошибку или отладить сервис ???

У меня есть целый источник. Пожалуйста, помогите мне.

ответ

0

Сделать вас Program.cs как

static class Program 
{ 
    /// <summary> 
    /// The main entry point for the application. 
    /// </summary> 
    static void Main() 
    { 
    #if DEBUG 
     Service1 myService = new Service1(); 
     myService.OnDebug(); 
     System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite); 
    #else 
     ServiceBase[] ServicesToRun; 
     ServicesToRun = new ServiceBase[] 
     { 
      new Service1() 
     }; 
     ServiceBase.Run(ServicesToRun); 
    #endif 

    } 
} 

и файл Service1.cs должен быть как ..

public Service1() 
{ 
    InitializeComponent(); 
} 

public void OnDebug() 
{ 
    OnStart(null); 
} 

protected override void OnStart(string[] args) 
{ 
    // your code to do something 
} 

protected override void OnStop() 
{ 
} 

Теперь, на основе режима коммутатора "Debug/Release" из Visual Studio , ваш файл Program.cs будет включен/отключен. Если он находится в отладке, тогда раздел отладки будет включен, а другие будут прокомментированы/отключены и наоборот.

0

Вы можете отладить код веб-службы, используя код ниже.

Программа статического класса {

static void Main() 
    { 
     ServiceBase[] ServicesToRun; 
     ServicesToRun = new ServiceBase[] 
     { 
      new DataTransfer() 
     }; 

     if (Environment.UserInteractive) 
     { 
      RunInteractive(ServicesToRun); 

     } 
     else 
     { 
      ServiceBase.Run(ServicesToRun); 
     } 

     //ServiceBase.Run(ServicesToRun); 
    } 


    static void RunInteractive(ServiceBase[] servicesToRun) 
    { 
     Console.WriteLine("Services running in interactive mode."); 
     Console.WriteLine(); 

     MethodInfo onStartMethod = typeof(ServiceBase).GetMethod("OnStart", 
      BindingFlags.Instance | BindingFlags.NonPublic); 
     foreach (ServiceBase service in servicesToRun) 
     { 
      Console.Write("Starting {0}...", service.ServiceName); 
      onStartMethod.Invoke(service, new object[] { new string[] { } }); 
      Console.Write("Started"); 
     } 

     Console.WriteLine(); 
     Console.WriteLine(); 
     Console.WriteLine(
      "Press any key to stop the services and end the process..."); 
     Console.ReadKey(); 
     Console.WriteLine(); 

     MethodInfo onStopMethod = typeof(ServiceBase).GetMethod("OnStop", 
      BindingFlags.Instance | BindingFlags.NonPublic); 
     foreach (ServiceBase service in servicesToRun) 
     { 
      Console.Write("Stopping {0}...", service.ServiceName); 
      onStopMethod.Invoke(service, null); 
      Console.WriteLine("Stopped"); 
     } 

     Console.WriteLine("All services stopped."); 
     // Keep the console alive for a second to allow the user to see the message. 
     Thread.Sleep(1000); 
    } 
} 
+0

Я использую приведенный выше код и он работает прекрасно ... то сегодня я получаю исключение { «Исключение было брошено на цели вызова.» Внутреннее исключение: {«Указанная служба не существует как установленная служба»} Служба Service1 не найдена на компьютере «.». – user3174075

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

  • Нет связанных вопросов^_^