2012-07-13 22 views
5

Ben (aynı zamanda Windows Hizmet yükleyicisi gibi davranan) bir konsol uygulamasında barındırılan WCF hizmeti var bir, lütfen buraya daha bakın: http://msdn.microsoft.com/en-us/library/ms733069.aspxWCF selfhosting ile konsol uygulaması hata ayıklama modunda mı çalışıyor?

Bu konsol uygulamasında sınıf gibi görünüyor:

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

    } 

Bu, bir Windows Hizmetinde çalıştırmak için hazırlanmıştır, nasıl yapabilirim? Bunu, hata ayıklama modunda (geliştirme sırasında) normal bir selfhost olarak çalıştırabilir miyim? ya da çalışma zamanında bu servise hata ayıklamak için özel bir proje başlatmam gerekiyor mu?

Düzenleme: Var olan Windows hizmet projesini kullanmak ama böyle bir şey ana değiştirmeye karar

:

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

cevap

6

Bu benim yaptığım

Çözüm A

  • Dur benim Debug \ bin klasör gelen InstallUtil kullanarak bir Windows hizmeti yükleyin ve servis>Debug yapmak ... işleyin ve hizmet
  • VS eklemek için Ekle başladı kez sc start veya sc stop
  • kullanarak hizmetini başlatmak

Çözelti B

ilk satırında bir Debugger.Break çağrı var OnStart yöntemi.

Çözüm C

hizmetinizde aynı işi yapar geçici ayrı konsol uygulaması ekleyin.

+0

Hizmet II7'de çalışırken, Web sitesi ana bilgisayarının hata ayıklama sırasında başlatıldığını ve bunun localhost'tan çalıştırılmasının gerektiğini belirtebilirim. Bu harika bir çözümdü. Ama şimdi, WCF hizmetimi zaten windows hizmeti olarak yüklediğimi ve daha sonra konsolidasyon uygulamasındaki hata ayıklama işlemine başladığımı söyleyin, bu konsol uygulaması, Windows servisi tarafından kullanılan aynı kanalda bir WCF hizmeti başlatmayı deneyecek mi? Bu benim konsol uygulaması (selfhost) hata ayıklama önce Windows Hizmeti durdurmak zorunda olduğu anlamına mı geliyor? Görsel stüdyonda hata ayıklaması yapıp daha fazlasını yapamazsam harika olur. – Banshee

+0

@SnowJim Gördüğünüzü görüyorum ve kesinlikle bir acı olduğunu kabul ediyorum. Ama şu ana kadar geldiğim şey bu. Daha basit bir çözümün farkında değilim. C seçeneği ile çalışıyorum (istemci ve sunucu iki konsol uygulamasıdır ve bunları her ikisini de F5'te başlatacak şekilde yapılandırabilirsiniz). Hata ayıklamanıza gerek kalmadığında, A veya B seçeneği için geçiş yapardım. – oleksii

+0

Teşekkürler! Benim çözüm benim mevcut projeyi kullanmaktır ama ana yerine ServiceBase.Run (yeni (MyAppWindowsService()) Dubugger.IsAttached için bir denetim ekledi ve bu nedenle el ile hizmetlerini başlatmak ve aynı zamanda konsolda bazı bilgileri gösterir. Şimdiye kadar – Banshee

İlgili konular