Как заставить веб-сервер kestrel прослушивать нелокальные запросы?


я развернул свой c#, asp.net 5, приложение mvc 6 для сервера windows 2008. Я загорелся dnx web и он слушает порт 5000 и нормально работает при доступе с локального компьютера.

как я могу заставить его слушать нелокальные запросы?

P.S. Этот вопрос не является дубликатом this...it относится к asp.net предварительно RC1 при хостинге.ini на самом деле был.формат ini. Теперь это JSON, и я не могу найти никакой документации о том, что на самом деле должно быть оно.

P. P. S. реальное решение заключается в непринятом ответе на связанный вопрос с массивным предостережением. Шаги:

  1. измените свой проект.json за связанный ответ.
  2. опубликуйте свой проект на сервере.
  3. на сервере ...approotsrcyourproject папка и откройте окно командной строки там.
  4. выполнить dnx web - Это не
  5. выполнить dnu restore
  6. Run ' dnu строй'
  7. Run 'dnx web' - теперь веб-сервер должен начать нормально
3 51

3 ответа:

файл конфигурации по умолчанию используется сервером Kestrel hosting.json. Название было изменено несколько раз в разных бета-версий. Если вы используете сейчас project.json следующим "command" раздел

"commands": {
    "web": "Microsoft.AspNet.Server.Kestrel"
}

затем во время запуска сервера из командной строки

dnx web

файл hosting.json будет читать. Файл

{
    "server.urls": "http://0.0.0.0:5000"
}

настроит сервер для прослушивания 5000 на каждом ip4-адресе. Этот конфигурация

{
    "server.urls": "http://::5000;http://0.0.0.0:5000"
}

сообщит, чтобы слушать 5000 на обоих ip4 и IP6 адрес.

можно указать альтернативные файлы конфигурации с помощьюASPNET_ENV переменная окружения или с помощью --config myconfig1.json (или config=myconfig1.json). Например, вы можете использовать

SET ASPNET_ENV=Development

и создать

в RC2 раздел команды проекта.json больше не используется. Я не попросил Кестрель забрать хостинг.json пока нет, но вы можете программно установить порт в главном приложении, где создается и настраивается новый WebHostBuilder. Просто добавить. UseUrls () метод, как в примере ниже

    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseUrls("http://0.0.0.0:5000/")
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();

        host.Run();
    }

Если вы пытаетесь поставить ASP.NET основное приложение внутри контейнера docker (который был моим вариантом использования для прослушивания нелокальных адресов), обратите внимание, что этот вариант использования уже был собран для вас Microsoft. Вы можете увидеть полную славу на https://hub.docker.com/r/microsoft/aspnetcore/

в текущий момент (v1.0.1) ключевой магией для решения этой проблемы является то, что исходный файл Dockerfile содержит параметр переменной среды url, а приложение не пытается переопределить это. (Действительно, контейнерное приложение должно внутренне утверждать как можно меньше о среде, в которой оно будет работать.)

ENV ASPNETCORE_URLS http://+:80

обратите внимание на знак "плюс", а не звездочка есть. Я действительно рекомендую посетить приведенную выше ссылку dockerhub над чтением моего ответа до тех пор, пока ссылка хороша. Версия 1.1 не за горами, и все может измениться снова в будущем.

при запуске контейнера, убедитесь, что чтобы предоставить гостевой порт 80, в соответствии с параметром переменной среды. Например:

docker run -d -p 8000:80 myapp
curl localhost:8000