Как запустить несколько экземпляров приложения из Main ()?

#c# #console-application

#c# #консольное приложение

Вопрос:

Я тестирую балансировщик нагрузки, для этого мне нужно запустить несколько HTTP-серверов. Прямо сейчас я могу запускать несколько HTTP-серверов, создавая несколько проектов. Однако я хотел бы знать, возможно ли запустить несколько экземпляров приложения только из одного решения.

Например, у меня есть следующий метод:

     private static void RunLocalHttpServer(int Port)
    {
        try
        {
            HttpListener HttpListener = new HttpListener();
            HttpListener.Prefixes.Add("http://localhost:"   Port.ToString()   "/");
            HttpListener.Start();
        }
        catch (WebException ex)
        {
            Console.WriteLine(ex);
        }
    }
  

Этот метод вызывается в методе main моего консольного приложения, примерно так:

     static void Main(string[] args) {
        int[] ServerPorts = {8081, 8082, 8083};
        for (int i = 0; i < ServerPorts.Length; i  ) {
            RunLocalHttpServer(ServerPorts[i]);
        } 
    }
  

Когда я запускаю это приложение, оно открывает одну консоль с сервером, который прослушивает порт 8081. Однако я хотел бы запустить, в данном случае три отдельные консоли, где в каждой консоли будет запущен сервер (один на порту 8081, один на 8082 и один на 8083).

Возможно ли это сделать с помощью одного решения? Если нет, что я могу использовать в качестве альтернативы для достижения своей цели? Заранее спасибо.

Комментарии:

1. Почему это должно быть в одном решении? Почему это вообще должно быть в решении VS? Почему бы не сделать это старомодным и простым способом, просто используя какой-нибудь пакетный скрипт (или Powershell) для запуска такого-то количества экземпляров вашей программы? (передайте порт для каждого экземпляра программы, который вы запускаете, в качестве аргумента командной строки).

2. Почему вы не можете просто запустить несколько экземпляров исполняемого файла, передавая порт в качестве аргумента командной строки?

3. Предположим, возможно, вы могли бы создать задачу для каждого экземпляра, который вы хотите создать, и дождаться, пока все они завершат «закрываться». Если вы можете просто запустить несколько экземпляров своего приложения и ввести номер порта, как предложил Дмитрий…

4. добавьте свой метод в библиотеку классов, созданную 3 консольными приложениями, и щелкните правой кнопкой мыши решение > свойство > проект с несколькими запусками и запустите все 3 консольных приложения одновременно

Ответ №1:

Если нет, что я могу использовать в качестве альтернативы для достижения своей цели?

В качестве альтернативы вы можете использовать netcat для прослушивания определенных портов.