Самостоятельный хостинг 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

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

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

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

Я трачу много часов на решение аналогичной проблемы в 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(options); 

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

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

Не работает:

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

ОК:

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

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

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

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

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

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

Давайте будем гением компьютера.