Самостоятельный хостинг 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
Ответы
Ответ 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-адрес или имя компьютера.
Отказ от ответственности: я не эксперт по безопасности, поэтому я не знаю последствий для безопасности при этом.