Как сделать приложение ASP.NET Core (служба, а не IIS) доступным из сети - PullRequest
0 голосов
/ 27 июня 2018

Я получил приложение 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 для получения дополнительной информации.

Теперь у меня закончились идеи.

Что мне нужно сделать, чтобы мой сервис был доступен из сети?

1 Ответ

0 голосов
/ 27 июня 2018

Если вы связываетесь с http://localhost:5000, то сервер прослушивает этот точный адрес и порт. К сожалению, на localhost нельзя звонить извне локальной машины.

В документации указано:

Настройки в UrlPrefixes переопределяют UseUrls / urls / ASPNETCORE_URLS Настройки. Следовательно, преимущество UseUrls, urls и Переменная среды ASPNETCORE_URLS в том, что ее легче переключать между Kestrel и HTTP.sys.

Итак, если вы хотите выполнить развертывание на другом сервере, но не знаете URL-адрес во время сборки, вы можете вместо этого настроить переменную среды для предоставления префиксов URL-адресов. В Windows вы должны установить следующую переменную окружения:

ASPNETCORE_URLS="http://<machine_name>:5050"

* замените <machine_name> на имя локальной машины.

Также удалите options.UrlPrefixes.Add("http://localhost:5050"); из вашего кода.

Когда вы запустите службу, вы сможете получить доступ к службе из любого места, где можно увидеть машину, на которой она запущена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...