2017-12-27 236 views
0

我有一個WCF服務。現在我想將其轉換爲控制檯應用程序。基本上,這是一項簡單的服務。它僅根據PowerShell請求的客戶端請求執行2個作業。將WCF服務轉換爲控制檯應用程序

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

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

我的服務偵聽請求這2個請求。

我有這樣的WCF代碼:

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

在我的控制檯應用程序我不能使用WebServiceHostWebHttpBinding。什麼是最好的替代品?我正在考慮使用簡單的HttpClient。但我不確定這是否是正確的選擇?

回答

0

爲什麼不使用命令行參數並完全避免WebServiceHost?然後,您只需比較來自Main函數的args[](請參閱,例如https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/main-and-command-args/)以確定它是否是BackupClient1命令或BackupClient2命令。

如果您想進一步理解這個概念,您可以將BackupClient1命令和BackupClient2命令的功能提取到單獨的庫中,並使前端(WCF和命令行)使用相同的後端。

如果你真的需要WCF服務(如下面的評論所述)請參考MSDN article;你將不得不提供您的配置,並找出如何以表明您希望結束在很好的方式方法,但它應該歸結爲這樣的事:

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

但客戶必須通過PS調用-的WebRequest「要求http:// localhost:10000 /。所以我不能使用cmd參數 – masiboo

+0

在這種情況下,您可以參考此示例如何實例化WCF「ServiceHost」(https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-create-a-service-endpoint-in-code),但是您需要解決如何停止服務 - 您需要例如在啓動後運行永久循環服務和服務中的附加命令來指示服務應該退出。 – shrpq

相關問題