2011-05-03 12 views
8

Cuando crea un Servicio de Windows, crea una lista de los servicios que desea iniciar. El valor por defecto es la siguiente:Servicio de Windows: ¿varias instancias de la misma clase de servicio?

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

Se puede tener varias instancias de la misma clase de servicio (que se unen a diferentes direcciones o puertos), como este?

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

¿O eso causa problemas? ¿Deberíamos usar dos clases diferentes en su lugar? ¿Cuál es el mejor enfoque para este problema?

Respuesta

1

Un servicio en sí no se vincula a direcciones o puertos. Puede hacer que el servicio inicie subprocesos o tareas que sí lo hacen, por lo que un servicio podría iniciar subprocesos para escuchar, p. http y otras direcciones: puertos o lo que quieras que haga.

El siguiente ejemplo muestra lo que quiero decir, está en C# pero si no se adapta bien a usted, entonces use this to translate. Mi función principal sería en su caso la función de inicio de su servicio.

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(); 


    } 
} 

Además, here is a nice summary de por qué su primer enfoque no funciona y una forma alternativa de cómo moverse por la que

+1

1 7 upvotes en la Q y ninguno en la respuesta? No estoy seguro de por qué, ya que es una buena – Basic

Cuestiones relacionadas