Ich habe einen WCF-Dienst in einer Konsole-Anwendung gehostet (die auch als Windows-Dienst-Installer wirkt), siehe Bitten hier mehr: http://msdn.microsoft.com/en-us/library/ms733069.aspxAusführen von Consol-Anwendung im Debug-Modus mit WCF Selfhosting?
Dies ist, wie die Klasse in der Consol-Anwendung wie folgt aussieht:
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();
}
}
Dies ist für die Ausführung in einem Windows-Dienst gemacht, wie mache ich so kann ich dies als eine regelmäßige Selfhost im Debug-Modus (während der Entwicklung) ausführen? Oder muss ich wirklich ein spezielles Projekt starten, um diese Servuce während der Laufzeit debuggen zu können?
Edit:
Ich beschloss, die bestehende Windows-Projekt zu verwenden, aber das Haupt zu so etwas wie dies zu ändern:
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());
}
Wenn der Dienst in II7 ausgeführt wurde, konnte ich nur angeben, dass der Website-Host im Debug gestartet werden sollte und dass er von localhost ausgeführt werden sollte. Das war eine großartige Lösung. Aber jetzt, sagen wir, dass ich meinen WCF-Dienst bereits als Windows-Dienst installiert habe und dann meine Consol-Anwendung zum Debuggen starte, wird diese Consol-App versuchen, einen WCF-Dienst auf demselben Kanal zu starten, der bereits vom Windows-Dienst verwendet wird? Das bedeutet, dass ich den Windows-Dienst vor dem Debuggen meiner Consol-App (Selfhost) beenden muss? Es wäre toll, wenn ich nur im Visual Studio auf Debugging stoße und sonst nichts. – Banshee
@SnowJim Ich sehe Sie zeigen und ich stimme völlig zu, es ist ein Schmerz. Aber so weit bin ich gekommen. Mir ist keine einfachere Lösung bekannt. Ich würde mit der Option C arbeiten (Client und Server sind zwei Konsolenanwendungen und Sie können konfigurieren, sie beide auf F5 zu starten). Sobald Sie es nicht viel debuggen müssen, würde ich für Option A oder B wechseln. – oleksii
Danke! Meine Lösung ist, das vorhandene Projekt zu verwenden, aber anstelle von ServiceBase.Run (neu (MyAppWindowsService()) habe ich im Wesentlichen einen Check für Dubugger.IsAttached hinzugefügt und wenn dies manuell gestartet wird, werden auch einige Informationen in der Konsole angezeigt. Das funktioniert großartig so weit – Banshee