将WCF服务转换为控制台应用程序

问题描述 投票:0回答:1

我有一个WCF服务。现在我想将其转换为控制台应用程序。基本上,这是一项简单的服务。它只能执行2个作业,具体取决于PowerShell请求的客户端请求。

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。但我不确定这是一个正确的选择吗?

c# wcf console-application
1个回答
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
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.