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