创建
Windows服务时,您将创建要启动的服务列表.默认是这样的:
ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service}
你能拥有相同Service类的多个实例(绑定到不同的地址或端口),像这样吗?
ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service("Option1"),New Service("Option2")}
服务本身不会绑定到地址或端口.您可以使服务启动线程或任务执行,因此一个服务可以启动线程以侦听例如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为什么你的第一种方法不起作用,以及如何解决这个问题的另一种方法