我有一个 WCF 服务。现在我想将其转换为控制台应用程序。基本上,这是一项简单的服务。它仅根据 PowerShell 请求的客户端请求执行 2 个作业。
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();
我无法在我的控制台应用程序中使用WebServiceHost
和WebHttpBinding
。什么是最好的替代品?我正在考虑使用 simple HttpClient
。但我不确定这是一个正确的选择吗?
为什么不使用命令行参数并WebServiceHost
完全避免?然后您可以比较您的args[]
from Main 函数(参见例如https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/main-and-command-args/)以确定它是BackupClient1
命令还是BackupClient2
命令。
如果您想进一步了解这个概念,您可以将BackupClient1
命令和BackupClient2
命令的功能提取到单独的库中,并使用相同的后端拥有前端(WCF 和命令行)。
如果您确实需要 WCF 服务(如下面的评论所述),请参阅这篇MSDN 文章;您将必须提供您的配置并弄清楚如何表明您希望以良好的方式结束该过程,但它应该归结为以下内容:
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
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句