如何在没有IIS的C#Windows服务中启用远程通信?
我越来越困惑于使用WCF创建一个简单的Windows服务和一个远程可调用的方法,然后从控制台应用程序调用该方法是多么困难 我可以创建和安装Windows服务,但找不到任何方法允许控制台应用程序与其通信 我的目标如下:如何在没有IIS的C#Windows服务中启用远程通信?,c#,windows,wcf,service,C#,Windows,Wcf,Service,我越来越困惑于使用WCF创建一个简单的Windows服务和一个远程可调用的方法,然后从控制台应用程序调用该方法是多么困难 我可以创建和安装Windows服务,但找不到任何方法允许控制台应用程序与其通信 我的目标如下: 允许Windows服务自宿主WCF服务,公开单个方法,而不管它安装在哪台计算机上 希望控制台应用程序能够在用户输入名称的计算机上调用该方法 不希望要求IIS存在 希望有一个干净、简单、简短的解决方案。一页或更少代码的奖励积分 没有讨厌的过度设计的配置文件 我想如果有必要的话,我
- 允许Windows服务自宿主WCF服务,公开单个方法,而不管它安装在哪台计算机上
- 希望控制台应用程序能够在用户输入名称的计算机上调用该方法
- 不希望要求IIS存在
- 希望有一个干净、简单、简短的解决方案。一页或更少代码的奖励积分
- 没有讨厌的过度设计的配置文件
感谢所有人,我终于想出了以下解决方案 以下基础结构通过Windows服务内的WCF公开Comms类,而不需要配置文件。启用元数据发布,以便我们可以向相关的Console Application tester添加服务引用:
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);
}
}
}
}
谢谢您的帮助。是-您可以在Windows服务中“自行托管”WCF服务,而无需IIS。。。以下链接提供了入门所需的全部内容(说明、源代码等):
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();
}
}
}