2017-12-27 6 views
0

Ich habe einen WCF-Dienst. Jetzt möchte ich es zur Konsolenanwendung konvertieren. Grundsätzlich ist es ein einfacher Service. Je nach Clientanforderung durch PowerShell-Anforderung werden nur zwei Jobs ausgeführt.Konvertieren eines WCF-Dienstes in eine Konsolenanwendung

Invoke-WebRequest "http://localhost:10000/backup/DoBackup?id=BackupClient1" 

oder

Invoke-WebRequest "http://localhost:10000/backup/DoBackup?id=BackupClient2" 

Mein Service hört für diese 2-Anforderungen auf Anfrage.

Ich habe diesen WCF-Code:

myService service = new myService(_settings); 
    backupServiceHost = new WebServiceHost(service, _backupAddress); 
    WebHttpBinding binding = new WebHttpBinding(); 
    string address = ""; 
    ServiceEndpoint endpoint = backupServiceHost .AddServiceEndpoint(typeof(ISnapshotServiceContract), binding, address); 
    backupServiceHost .Open(); 

ich nicht WebServiceHost und WebHttpBinding in meiner Konsolenanwendung verwenden kann. Was ist der beste Ersatz dafür? Ich denke, einfach zu verwenden HttpClient. Aber ich bin mir nicht sicher, ob es eine richtige Auswahl ist.

Antwort

0

warum nicht Befehlszeilenparameter verwenden und WebServiceHost insgesamt vermeiden? Sie können dann einfach Ihre args[] von Hauptfunktion (siehe z. B. https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/main-and-command-args/) vergleichen, um festzustellen, ob es BackupClient1 Befehl oder BackupClient2 Befehl ist.

Wenn Sie dieses Konzept weiterführen möchten, können Sie die Funktionen BackupClient1 Befehl und BackupClient2 Befehl in separate Bibliothek extrahieren und Frontends (WCF und Befehlszeile) mit demselben Backend haben.

Wenn Sie wirklich WCF-Service benötigen (wie in den Kommentaren unten angegeben), beziehen Sie sich bitte auf diese MSDN article; Sie werden Ihre Konfiguration zu schaffen haben und herauszufinden, wie, um anzuzeigen, dass Sie wollen den Prozess in der netten Art und Weise beenden, aber es sollte so etwas wie dieses einkochen:

String baseAddress = "http://localhost:10000/backup"; 
BasicHttpBinding binding = new BasicHttpBinding(); 

using (ServiceHost host = new ServiceHost(typeof(myService))) 
{ 
    host.AddServiceEndpoint(typeof(IMyService), binding, baseAddress); 
    host.Open(); 

    while(true) { 
     // Figure out how to exit this loop - e.g. listen to some command from service 
    } 
} 
+0

Aber der Kunde von ps Invoke-WebRequest anfordern müssen " http: // localhost: 10000 /. Also kann ich nicht cmd Argument verwenden – masiboo

+0

In diesem Fall können Sie auf dieses Beispiel beziehen, wie WCF 'ServiceHost' (https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-erstellen-a-service-endpoint-in-code), jedoch müssen Sie lösen, wie Sie den Dienst stoppen können - Sie müssen z Dienst und zusätzlicher Befehl im Dienst, um anzuzeigen, dass der Dienst beendet werden sollte. – shrpq

Verwandte Themen