Самостоятельный хостинг 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, используя
- Как SignalR работает внутри?
- Ограничение соединения SignalR и браузера
- Как реализовать данные в реальном времени для веб-страницы
- Signalr / Hub не загружается в IIS 7, но корректно работает в Visual Studio
- Вызовите конкретного клиента из SignalR
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
- Пример приложения приложения SignalR
- SignalR + отправка сообщения в концентратор через метод действия
- Получите количество слушателей, клиентов, подключенных к концентратору SignalR
- SignalR не использует сеанс на сервере
- SignalR: Зачем выбирать Hub vs. Persistent Connection?
- Как использовать signalr в Android
- SignalR - Как отключить WebSockets
- Нет доступа к информации о сеансе через концентратор SignalR. Является ли мой дизайн неправильным?
поэтому, оказывается, вам нужно передать 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-адресу. Однако просто закрепите его в простой шаг за шагом:
- В
Main
of Program.cs (для консольного приложения):WebApp.Start
("http://*:8080"); - Из командной строки Windows (запустите как «Администратор») введите
netsh http add urlacl http://*:8080/ user=EVERYONE
- Перейдите в брандмауэр Windows с расширенной безопасностью и добавьте входящее правило, которое открывает TCP-порт 8080
Затем вы должны иметь доступ к другому компьютеру с использованием IP-адреса или имени компьютера.
Отказ от ответственности: я не эксперт по безопасности, поэтому я не знаю последствий для безопасности, связанных с этим.