Я развернул свое приложение C #, asp.net 5, mvc 6 на сервере Windows 2008. Я загорелся, dnx web
он прослушивает порт 5000 и отлично работает при доступе с локального компьютера.
Как мне заставить его слушать запросы, отличные от localhost?
PS Этот вопрос не является дубликатом этого ... он относится к asp.net pre RC1, когда у hosting.ini действительно был формат .ini. Теперь это JSON, и я не могу найти никакой документации о том, что на самом деле должно быть в нем.
PPS Настоящее решение - это непринятый ответ на связанный вопрос с серьезной оговоркой. Шаги:
- Измените свой project.json на связанный ответ.
- Опубликуйте свой проект на своем сервере.
- На сервере перейдите в папку ... \ Approot \ src \ YourProject и откройте там командное окно.
- Беги
dnx web
- не получится - Бежать
dnu restore
- Запускаем 'dnu build`
- Запустите 'dnx web' - теперь веб-сервер должен нормально запуститься
PS Для людей, голосующих за этот вопрос. Это устарело. Очень сильно устарело!
Это относилось к ранним версиям .NET Core. Вопрос и ответы, безусловно, неприменимы для текущих версий фреймворка (например, 2.x, 3.x).
c#
asp.net
asp.net-core
dnx
kestrel-http-server
Злой Хакер
источник
источник
dnu restore
,dnu build
а затемdnx web
правильно запустил веб-сервер. Я не знаю, почему это происходит, но, по крайней мере, я могу заставить это работать. Определенно есть ошибка, которую необходимо исправить до финальной версии. На данный момент это обходной путь.Ответы:
По умолчанию сервер Kestrel использует файл конфигурации
hosting.json
. Название менялось несколько раз в разных бета-версиях. Если вы используете сейчасproject.json
со следующим"command"
разделом"commands": { "web": "Microsoft.AspNet.Server.Kestrel" }
затем при запуске сервера из командной строки с помощью
файл
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
). Например, вы можете использоватьи создать
hosting.Development.json
файл с определенной конфигурацией. В качестве альтернативы вы можете использоватьproject.json
с"commands": { "web": "Microsoft.AspNet.Server.Kestrel" "webProd": "Microsoft.AspNet.Server.Kestrel --config prod.json" }
и запустить сервер по использованию
Напомню дополнительно, что может потребоваться, чтобы вы разрешили дополнительно прослушивать и регистрироваться (для запуска
dnx web
). Это необходимо из-за брандмауэра и локальной безопасности прослушивания новых портов TCP / HTTP. Что-то вроде ниже должно сделать локальную регистрацию и прослушивание порта 5000 для всех (IPv4 и IPv6):Для большей безопасности вы можете настроить указанную выше конфигурацию, чтобы предоставить минимальные права.
ОБНОВЛЕНО: Спасибо @BlaneBunderson. Можно использовать * вместо IP-адреса (например,
http://*:5000
) для прослушивания любых адресов IP4 и IP6 с любого интерфейса. Надо быть осторожным и не использовать этиhttp://*:5000;http://::5000
http://::5000;http://*:5000
http://*:5000;http://0.0.0.0:5000
http://*:5000;http://0.0.0.0:5000
потому что для этого потребуется дважды зарегистрировать адрес IP6
::
или адрес IP4 .0.0.0.0
Соответствует объявлению
Я думаю, что в будущем поведение может измениться. Таким образом , я бы рекомендовал использовать только
*:5000
,0.0.0.0:5000
и::5000
форму для регистрации любого ИТ - адреса.ОБНОВЛЕНО 2: ASP.NET Core RC2 изменяет (см. Объявление ) поведение загрузки значений по умолчанию. Необходимо внести изменения в файл
Main
для загрузки настроекhosting.json
и параметры командной строки. Ниже приведен пример использованияpublic static void Main(string[] args) { var config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("hosting.json", optional: true) .AddEnvironmentVariables(prefix: "ASPNETCORE_") .AddCommandLine(args) .Build(); var host = new WebHostBuilder() .UseUrls("http://*:1000", "https://*:1234", "http://0.0.0.0:5000") .UseEnvironment("Development") .UseConfiguration(config) .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup<Startup>() .Build(); host.Run(); }
Выше используйте код три привязок:
"http://*:1000"
,"https://*:1234"
,"http://0.0.0.0:5000"
по умолчанию , вместо использования порта по умолчанию 5000 по умолчанию (точнее использованиеhttp://localhost:5000
). Звонок.UseConfiguration(config)
производится после.UseUrls
. Таким образом, конфигурация, загруженная изhosting.json
командной строки или из командной строки, перезаписывает параметры по умолчанию. Если удалить одну.SetBasePath(Directory.GetCurrentDirectory())
строку, тоhosting.json
она будет загружена из того же каталога, в котором будет скомпилирована dll приложения (напримерbin\Debug\netcoreapp1.0
).Можно использовать выполнение как
dotnet.exe run --server.urls=http://0.0.0.0:5000
для перезаписи настроек по умолчанию (из
UseUrls
) и настроек из"server.urls"
свойства,hosting.json
если оно существует.Таким же образом можно перезаписать настройки ULR, установив переменную среды
set ASPNETCORE_SERVER.URLS=http://localhost:12541/
то для привязки
dotnet.exe run
будет использоваться запуск приложения по умолчаниюhttp://localhost:12541/
.Вы можете найти здесь пример использования привязки HTTPS.
ЗАМЕЧАНИЕ: имя переменной среды изменено с
ASPNETCORE_SERVER.URLS
наASPNETCORE_URLS
в более поздних версиях ASP.NET (см. Здесь документацию по ASP.NET Core 3.1).источник
http://*:5000
это то же самое, чтоhttp://::5000;http://0.0.0.0:5000
и нетhttp://0.0.0.0:5000
. Он принудительно прослушивает как IPv4, так и IPv6. Вы можете проверить это с помощьюhttp://*:5000;http://::5000
илиhttp://::5000;http://*:5000
. При регистрации второго адреса появляется ошибка «Microsoft.AspNet.Server.Kestrel.Networking.UvException: Error -4091 EADDRINUSE address already in use». В некоторых сценариях регистрация как IPv4, так и IPv6 хороша, в других случаях - нет. В любом случае хорошо упомянуть путь..UseStartup<Startup>()
переопределить.UseConfiguration(config)
в вашем примере "обновление 2"?В RC2 раздел команд файла project.json больше не используется. Я еще не получил Kestrel, чтобы забрать hosting.json, но вы можете программно установить порт в Main приложения, где создается и настраивается новый 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(); }
источник
.UseUrls("http://*:5000")
вместо этого, и порт перенаправил 5000 с пустым IP-адресом хоста на VirtualBox, и, наконец, я могу добраться до конечных точек .NET Core, размещенных в Docker, с моего Mac. Сладкий!Если вы используете asp.net core 2.1 +, измените раздел конфигурации в appsettings.json.
"Kestrel": { "EndPoints": { "Http": { "Url": "http://0.0.0.0:5002" } } },
источник
ASPNETCORE_URLS
у меня не получилосьЕсли вы пытаетесь поместить приложение ASP.NET Core в контейнер докеров (что было моим вариантом использования для прослушивания адресов, отличных от localhost), обратите внимание, что этот вариант использования уже был разработан для вас 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
источник
Для AspNetCore 3.1+ просто добавьте в файл следующую строку
appsettings.json
:"Urls": "http://*:80"
источник
hosting.json
не работают.Установите для переменной среды
ASPNETCORE_URLS
значениеhttp://0.0.0.0:5000/
.При запуске из Visual Studio вы добавляете переменную среды на вкладке «Отладка» свойств проекта.
источник