Служба сама по себе не привязывается к адресам или портам.Вы можете заставить службу запускать потоки или задачи, которые выполняются, чтобы одна служба могла запускать потоки для прослушивания, например, http и других адресов: портов или того, что вы хотите, чтобы они делали.
В следующем примере показано, что я имею в виду, он написан на C #, но если он вам не подходит, используйте для перевода .Моя основная функция в вашем случае будет функцией запуска вашего сервиса.
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();
}
}
Также, вот хорошее резюме о том, почему ваш первый подход не работает, и альтернативный способ обойти это