Я получил приложение ASP.NET Core, которое я настроил для запуска в качестве службы (поэтому на целевой машине IIS отсутствует). Также я хочу использовать HTTP.sys.
Моя конфигурация выглядит так:
var host = WebHost.CreateDefaultBuilder(args)
.UseContentRoot(pathToContentRoot)
.UseHttpSys(options =>
{
// The following options are set to default values.
options.Authentication.Schemes = AuthenticationSchemes.None;
options.Authentication.AllowAnonymous = true;
options.MaxConnections = null;
options.MaxRequestBodySize = 30000000;
options.UrlPrefixes.Add("http://localhost:5050");
})
.UseStartup<Startup>()
.UseApplicationInsights()
.Build();
if (isService)
{
host.RunAsService();
}
else
{
host.Run();
}
Посмотрите на строку
options.UrlPrefixes.Add("http://localhost:5050");
Это в значительной степени стандартно. Но: если я опубликую это приложение и установлю сервис на ПК в своей сети, я не смогу его найти.
У ПК есть IP, например 10.35.39.113, и я могу пропинговать его. Но когда я пытаюсь подключиться через браузер (с другого компьютера в локальной сети), откройте http://10.35.39.113:5050/, там написано ошибка 400 «Bad Request» .
Я добавил правила в брандмауэр, отключил брандмауэр, я запускаю
netsh http add urlacl url = http://+:5050/ user = Users
но это не сработало. Ошибка изменилась с 400 «Неверный запрос» на ошибку 503 «Служба недоступна» .
Я только получил его, изменив строку UrlPrefixes.Add:
options.UrlPrefixes.Add("http://*:5050");
Но есть большое предупреждение в документации HTTP.sys. Ссылка на документацию
Внимание
Подстановочные знаки верхнего уровня (http://*:80/ и http://+:80) не должны
использоваться. Подстановочные знаки верхнего уровня могут открыть ваше приложение для безопасности
уязвимости. Это относится как к сильным, так и к слабым групповым символам. использование
явные имена хостов, а не подстановочные знаки. Подстановка поддомена
(например, * .mysub.com) не имеет такой угрозы безопасности, если вы
контролировать весь родительский домен (в отличие от * .com, который
уязвим). См. Rfc7230 section-5.4 для получения дополнительной информации.
Теперь у меня закончились идеи.
Что мне нужно сделать, чтобы мой сервис был доступен из сети?