2011-05-03 179 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

相關問題