![](/img/trans.png)
[英]How to start or stop IIS and also a Windows Service in remote machine using C#
[英]How to enable remote communication in a C# Windows Service without IIS?
使用 WCF 使用单个远程调用方法创建简单的 Windows 服务,然后从控制台应用程序调用该方法是多么困难,这让我越来越感到困惑。
我可以创建和安装 Windows 服务,但找不到任何方法允许控制台应用程序与其通信。
我的目标如下:
我想我可以在必要时放弃没有配置文件的目标,但我对其他目标很确定。
除了向我指出长而复杂的 MSDN 文章或书籍之外,是否有人有任何用于公开和使用该服务的示例代码? 非常感谢您的帮助。 我 promise 最终完全阅读了 WCF - 我所需要的只是一个开始!
作为一个兴趣点:定义 WCF 服务时是否需要接口? 为什么服务接口在 WCF 示例代码中如此普遍?
在此先感谢大家,
缺口
感谢所有我设法组合以下解决方案的人!
以下基础架构通过 Windows 服务中的 WCF 公开 Comms class,无需配置文件。 启用元数据发布,以便我们可以添加对相关控制台应用程序测试器的服务引用:
namespace AgentService
{
using System;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.ServiceProcess;
[ServiceContract]
public class Comms
{
[OperationContract]
public string GetStatus() { return "Running"; }
}
public class SelfHost<T>
{
private ServiceHost host = null;
public void Start()
{
var baseAddress = new Uri("http://localhost:8080/AgentService/");
host = new ServiceHost(typeof(T), baseAddress);
var behaviour = new ServiceMetadataBehavior() { HttpGetEnabled = true };
host.Description.Behaviors.Add(behaviour);
host.Open();
}
public void Stop() { host.Close(); }
}
public static class Program
{
public static void Main(string[] args)
{
if (args.Length > 0)
{
var host = new SelfHost<Comms>();
host.Start();
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
host.Stop();
}
else
{
var servicesToRun = new ServiceBase[] { new AgentService() };
ServiceBase.Run(servicesToRun);
}
}
}
}
以下 class 包含整个测试仪控制台应用程序。 同样,不需要配置文件:
namespace Tester
{
using System;
using System.ServiceModel;
using Tester.Comms;
public class Program
{
public static void Main(string[] args)
{
var comms = new CommsClient(new BasicHttpBinding(),
new EndpointAddress("http://localhost:8080/AgentService/"));
Console.WriteLine(comms.GetStatus());
Console.ReadKey();
}
}
}
感谢所有的帮助。
是 - 您可以在 Windows 服务中“自托管”WCF 服务,而无需 IIS...以下链接提供了您入门所需的一切(解释、源代码等):
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.