2011-05-03 3 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과 대답에 대한 질문과 없음에 그

+1

한 7 upvotes 극복하는 방법의 또 다른 방법? 내가 왜 좋은지 모르겠다. – Basic

관련 문제