2011-05-03 142 views
8

当您创建一个Windows服务,您可以创建要启动服务的列表。默认值是这样的:Windows服务:同一个服务类的多个实例?

ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service} 

你能有相同的服务类(即绑定到不同的地址或端口)的多个实例,这样的吗?

ServicesToRun = New System.ServiceProcess.ServiceBase() {New Service("Option1"), New Service("Option2")} 

或者会导致问题?我们应该使用两个不同的类吗?解决这个问题的最佳方法是什么?

回答

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以及如何绕过上Q,没有对答案是

+1

+1 7 upvotes的另一种方式?我不确定为什么它是好的 – Basic 2012-07-07 02:09:13