Подтвердить что ты не робот

Самостоятельный хостинг OWIN и urlacl

Я создал самостоятельное приложение Nancy/SignalR, самостоятельно размещенное в OWIN, используя Microsoft.Owin.Host.HttpListener и Microsoft.Owin.Hosting

Все работает отлично нормально, но как только я пытаюсь использовать что-либо, кроме localhost для доступа к приложению, я получаю ошибку HTTP Error 503. The service is unavailable. Я даже не могу получить доступ к приложению, используя 127.0.0.1 или имя машины.

Я попытался добавить порт в urlacl, используя

http add urlacl http://*:8989/ user=EVERYONE, но, похоже, ничего не делает.

вот параметры запуска OWIN, которые я пробовал,

        var options = new StartOptions
        {
            Url = "127.0.0.1",
            App = GetType().AssemblyQualifiedName,
            Port = _configFileProvider.Port
        };

    var options = new StartOptions
        {
            App = GetType().AssemblyQualifiedName,
            Port = _configFileProvider.Port
        };

Вот исходный код для файла, который запускает и останавливает сервер https://github.com/NzbDrone/NzbDrone/blob/vnext/NzbDrone/Owin/OwinHostController.cs

4b9b3361

Ответ 1

так что вам нужно передать URL-адрес в StartOptions в том же формате, что и urlacl.

Изменение параметров запуска на код ниже устраняет проблему. теперь приложение доступно по сети.

  var options = new StartOptions("http://*:8989")
  {
      ServerFactory = "Microsoft.Owin.Host.HttpListener"
  };

Ответ 2

Я трачу много часов на решение подобной проблемы в Windows 8.1.

    StartOptions options = new StartOptions();

    options.Urls.Add("http://localhost:9000");
    options.Urls.Add("http://127.0.0.1:9000");
    options.Urls.Add("http://192.168.0.102:9000");
    options.Urls.Add(string.Format("http://{0}:9000", Environment.MachineName));

    WebApp.Start<Startup>(options);

Я не мог слушать или получал ошибку 503...

Если вы хотите прослушивать несколько IP-адресов, каждый адрес должен иметь собственную запись urlacl:

НЕ работает:

    netsh http>add urlacl http://+:9000/ user=EveryOne    

OK:

    netsh http>add urlacl http://localhost:9000/ user=EveryOne
    netsh http>add urlacl http://127.0.0.1:9000/ user=EveryOne
    etc.

После добавления резервирования для каждого адреса по отдельности все работает нормально.

Ответ 3

Благодаря информации, предоставленной @kay.one, я смог получить доступ к моему собственному веб-интерфейсу API 2.2 (OWIN/Katana, консольное приложение) с того же компьютера по IP-адресу. Однако просто закрепите его в простой шаг за шагом:

  • В Main для Program.cs(для консольного приложения): WebApp.Start<Startup>("http://*:8080");
  • В командной строке Windows (запустите как "Администратор" ) введите netsh http add urlacl http://*:8080/ user=EVERYONE
  • Перейдите в брандмауэр Windows с повышенной безопасностью и добавьте входящее правило, которое открывает TCP-порт 8080

Затем вы можете получить доступ с другого компьютера, используя IP-адрес или имя компьютера.

Отказ от ответственности: я не эксперт по безопасности, поэтому я не знаю последствий для безопасности при этом.