2012-07-13 25 views
5

Mam usług WCF obsługiwana w aplikacji ConSol (który również działa jako instalatora systemu Windows Service), zarzuty zobacz więcej tutaj: http://msdn.microsoft.com/en-us/library/ms733069.aspxUruchamianie aplikacji konsolowej w trybie debugowania z selfhostingiem WCF?

ten sposób klasa we wniosku ConSol wygląda następująco:

public class MyAppWindowsService : ServiceBase 
    { 
     public ServiceHost _MyAppClientServiceHost = null; 
     public ServiceHost _MyAppIntegrationServiceHost = null; 
     public ServiceHost _MyAppserviceHost = null; 

     public MyAppWindowsService() 
     { 
      // Name the Windows Service 
      ServiceName = "MyApp Service"; 
     } 

     public static void Main() 
     { 
      ServiceBase.Run(new MyAppWindowsService()); 
     } 

     private void StopService(ServiceHost serviceHost) 
     { 
      if (serviceHost != null) 
      { 
        serviceHost.Close(); 
        serviceHost = null; 
      } 
     } 
     private ServiceHost StartService(Type serviceType) 
     { 
      ServiceHost serviceHost = null; 

      // Create a ServiceHost for the CalculatorService type and 
      // provide the base address. 
      serviceHost = new ServiceHost(serviceType); 

      // Open the ServiceHostBase to create listeners and start 
      // listening for messages. 
      serviceHost.Open(); 

      return serviceHost; 
     } 
     private void StartServices() 
     { 
      StopService(_MyAppClientServiceHost); 
      StopService(_MyAppIntegrationServiceHost); 
      StopService(_MyAppServiceHost); 

      _MyAppClientServiceHost = StartService(typeof(MyApp.ServiceImplementation.MyAppClientService)); 
      _MyAppIntegrationServiceHost = StartService(typeof(MyApp.ServiceImplementation.MyAppIntegration)); 
      _MyAppServiceHost = StartService(typeof(MyApp.ServiceImplementation.HL7Service)); 
     } 
     private void StopServices() 
     { 
      StopService(_MyAppClientServiceHost); 
      StopService(_MyAppIntegrationServiceHost); 
      StopService(_MyAppHl7ServiceHost); 
     } 

     // Start the Windows service. 
     protected override void OnStart(string[] args) 
     { 
      StartServices(); 
     } 

     protected override void OnStop() 
     { 
      StopServices(); 
     } 

    } 

Jest to przeznaczone do działania w usłudze systemu Windows, w jaki sposób mogę zrobić to, aby uruchomić go jako zwykły selfhost w trybie debugowania (podczas programowania)? czy naprawdę muszę uruchomić specjalny projekt, aby móc debugować ten servuce podczas uruchamiania?

Edit:

postanowiłem wykorzystać istniejący projekt usługa systemu Windows, ale zmienić główny na coś takiego:

public static void Main() 
     { 
      if (Debugger.IsAttached) 
      { 
       Console.WriteLine("--- MyApp Services ---"); 
       Console.WriteLine("Starting services..."); 
       Instance.StartServices(); 
       Console.WriteLine("--Finished--"); 
       Console.WriteLine("Press any key to exit"); 
       Console.ReadKey(); 
       Instance.StopServices(); 
      } 
      else 
       ServiceBase.Run(new MyAppWindowsService()); 
     } 

Odpowiedz

6

To co robię

Rozwiązanie

  • zainstalować usługi Windows przy użyciu InstallUtil z mojego Debug \ bin folderu
  • Zatrzymaj i uruchom usługę za pomocą sc start lub sc stop
  • Gdy usługa zaczęła robić Debug> Attach to Process ... i dołączyć VS służbie

Roztwór B

Mają Debugger.Break połączenie na pierwszej linii metoda OnStart.

Roztwór C

Dodaj oddzielną aplikację konsoli temp które wykonuje tę samą pracę jako służbę.

+0

Gdy usługa była uruchomiona w II7, mógłbym tylko stwierdzić, że host Witryny powinien zostać uruchomiony podczas debugowania i że ma zostać uruchomiony z lokalnego hosta. To było świetne rozwiązanie. Ale teraz, powiedzmy, że już mam moją usługę WCF zainstalowaną jako usługę Windows, a następnie uruchamiam moją aplikację konsolową do debugowania, ta konsolowa aplikacja spróbuje uruchomić usługę WCF na tym samym kanale, który jest już używany przez usługę Windows? Oznacza to, że muszę zatrzymać usługę Windows przed debugowaniem aplikacji Consol (selfhost)? Byłoby wspaniale, gdybym mógł po prostu uruchomić debugowanie w visual studio i nic więcej. – Banshee

+0

@SnowJim Widzę, że punkt i całkowicie zgadzam się, że to jest ból. Ale jak dotąd to właśnie wymyśliłem. Nie znam żadnego prostszego rozwiązania. Chciałbym pracować z opcją C (klient i serwer są dwiema aplikacjami konsoli i możesz skonfigurować, aby uruchomić je oba na F5). Gdy już nie musisz zbytnio debugować, przełączam na opcję A lub B. – oleksii

+0

Dzięki! Moim rozwiązaniem jest użycie istniejącego projektu, ale zamiast ServiceBase.Run (nowy (MyAppWindowsService() w głównym dodałem sprawdzanie dla Dubugger.IsAttached i jeśli tak, ręcznie uruchomić usługi, a także pokazać pewne informacje w konsoli. do tej pory – Banshee

Powiązane problemy