Owin Hosting запускает самостоятельный хост

#c# #owin

#c# #owin

Вопрос:

В консольном приложении вы можете запустить owin-хост следующим образом:

 string url = "http://localhost:8080";
using (WebApp.Start(url))
{
      Console.WriteLine("Server running on {0}", url);
      Console.ReadLine();
}
  

Строка

 Console.ReadLine();
  

останавливает остановку сервера. Как мне запустить сервер внутри класса и остановить его остановку? Стал бы я это делать?

     public bool keepHosting;
    public void Start()
    {
        using (WebApp.Start(serverUrl))
        {
            while (keepHosting)
            {

            }
        }
    }
  

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

1. Не слишком уверен, что вы пытаетесь сделать — что вызовет это (например, запуск приложения)? Все, что может что-то запустить, вероятно, также должно иметь возможность остановить это, что невозможно выше. Вероятно, вам нужно вызвать «Start» в точке входа в приложение в целом и вместо этого сохранить эту часть.

2. Изменен код, чтобы быть немного понятнее. Я просто не знаю, как поддерживать процесс хостинга.

3. while Цикл с Console.ReadLine(); чем-то, что я обычно делаю сам. Не понимаю, почему это не сработает для вас.

4. Процесс хостинга будет оставаться активным, пока ваше приложение работает. Итак, в консольном приложении он активен, потому что строка чтения ожидает ввода (поэтому программа все еще работает). Если вы хотите запустить веб-приложение, но не управлять им в этом классе, вам, вероятно, потребуется сохранить результат метода WebApp.Start и реализовать шаблон IDisposable для вызова dispose для этого, когда ваш класс будет удален. Это будет зависеть от вызывающего абонента, чтобы сохранить себя в живых.

5. общедоступный идентификатор Start() { возвращает WebApp.Start(ServerURL); }

Ответ №1:

Я думаю, вы могли бы это сделать.

     public IDisposable Start()
    {
     return  WebApp.Start(serverUrl);
    }