创建Windows服务时,您将创建要启动的服务列表。默认为:
ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service}
你能拥有同一个Service类的多个实例(绑定到不同的地址或端口),像这样?
ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service("Option1"), New Service("Option2")}
或者会导致问题吗?我们应该使用两个不同的类吗?解决这个问题的最佳方法是什么?
答案 0 :(得分:1)
服务本身不会绑定到地址或端口。您可以使服务启动线程或任务执行,因此一个服务可以启动线程以侦听例如http和其他地址:端口或任何你想要它做的事情。
以下示例显示了我的意思,它在C#中,但如果它不能很好地转换为您,则使用this to translate。在您的情况下,我的主要功能是您的服务的启动功能。
public abstract class ServiceModuleBase
{
public abstract void Run();
}
public class SomeServiceModule : ServiceModuleBase
{
//Implement Run for doing some work, binding to addresses, etc.
}
public class Program
{
public static void Main(string[] args)
{
var modules = new List<ServiceModule> {new SomeServiceModule(), new SomeOtherServiceModule()};
var tasks = from mod in modules
select Task.Factory.StartNew(mod.Run, TaskCreationOptions.LongRunning);
Task.WaitAll(tasks.ToArray());
Console.Out.WriteLine("All done");
Console.ReadKey();
}
}
另外,here is a nice summary为什么你的第一种方法不起作用,另一种方法是如何解决这个问题