2011-05-03 12 views
8

Bir Windows Hizmeti oluşturduğunuzda, başlatmak istediğiniz hizmetlerin bir listesini oluşturursunuz. Varsayılan şudur:Windows Hizmeti: Aynı hizmet sınıfının birden çok örneği mi?

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

böyle aynı hizmet sınıfındaki (farklı adresler veya limanlara bağlanan) birden çok örneğini, olabilir mi?

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

Yoksa bu sorunlara neden olur mu? Bunun yerine iki farklı sınıf kullanmalı mıyız? Bu probleme en iyi yaklaşım nedir?

cevap

1

Tek başına bir hizmet adreslere veya bağlantı noktalarına bağlanmaz. Hizmetin başlatma iş parçacığı veya görevlerini yapabilirsiniz, böylece bir hizmet, örneğin dinlemek için iş parçacığı başlatabilir. http ve diğer adresler: portlar veya ne yapmak istiyorsan yap.

Aşağıdaki örnekte, ne demek istediğimi, C# 'da olduğunu ancak sizin için iyi bir şekilde çeviri yapmıyorsa this to translate kullanın. Ana fonksiyonum sizin durumunuzda servisinizin Başlatma fonksiyonu olacaktır. Ayrıca

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


    } 
} 

, ilk yaklaşım çalışmıyor neden here is a nice summary ve Yanıta Q ve hiçbiri o

+1

1 7 upvotes etrafında nasıl alternatif bir yolu? Neden iyi biri olduğundan emin değilim. – Basic