Wdrożyłem moją aplikację w języku C #, asp.net 5, mvc 6 na serwerze z systemem Windows 2008. Odpaliłem dnx web
i nasłuchuje portu 5000 i działa dobrze podczas uzyskiwania dostępu z lokalnego komputera.
Jak mogę nasłuchiwać żądań innych niż localhost?
PS To pytanie nie jest duplikatem tego ... odnosi się do asp.net w wersji wcześniejszej niż RC1, podczas gdy hosting.ini w rzeczywistości miał format .ini. Teraz jest to JSON i nie mogę znaleźć żadnej dokumentacji na temat tego, co powinno w nim być.
PPS Prawdziwym rozwiązaniem jest nieakceptowana odpowiedź na powiązane pytanie, z ogromnym zastrzeżeniem. Kroki:
- Zmień plik project.json zgodnie z połączoną odpowiedzią.
- Opublikuj swój projekt na swoim serwerze.
- Na serwerze przejdź do folderu ... \ Approot \ src \ YourProject i otwórz tam okno poleceń.
- Uruchom
dnx web
- to się nie powiedzie - Biegać
dnu restore
- Uruchom „dnu build”
- Uruchom „dnx web” - serwer WWW powinien teraz zacząć działać poprawnie
PS Dla osób zagłosujących za tym pytaniem. Jest przestarzały. Bardzo przestarzały!
Dotyczyło wczesnych wersji .NET Core. Pytanie i odpowiedzi z pewnością nie dotyczą obecnych wersji frameworka (np. 2.x, 3.x)
c#
asp.net
asp.net-core
dnx
kestrel-http-server
AngryHacker
źródło
źródło
dnu restore
, adnu build
następniednx web
poprawnie uruchomiłem serwer WWW. Nie wiem, dlaczego tak się dzieje, ale przynajmniej jestem w stanie sprawić, by to zadziałało. Zdecydowanie jest błąd, który należy rozwiązać przed ostatecznym wydaniem. Na razie jest to obejście.Odpowiedzi:
Domyślny plik konfiguracyjny używany przez serwer Kestrel to
hosting.json
. Nazwa była wielokrotnie zmieniana w różnych wersjach beta. Jeśli używasz terazproject.json
z następującą"command"
sekcją"commands": { "web": "Microsoft.AspNet.Server.Kestrel" }
następnie podczas uruchamiania serwera z linii poleceń przez
plik
hosting.json
zostanie odczytany. Plik{ "server.urls": "http://0.0.0.0:5000" }
skonfiguruje serwer do nasłuchiwania 5000 na każdym adresie IP4. Konfiguracja
{ "server.urls": "http://::5000;http://0.0.0.0:5000" }
poinformuje o nasłuchiwaniu 5000 na adresach IP4 i IP6.
Można określić alternatywne pliki konfiguracyjne za pomocą
ASPNET_ENV
zmiennej środowiskowej użycia lub przez użycie--config myconfig1.json
(lubconfig=myconfig1.json
). Na przykład możesz użyći stworzyć
hosting.Development.json
plik o określonej konfiguracji. Alternatywnie możesz użyćproject.json
z"commands": { "web": "Microsoft.AspNet.Server.Kestrel" "webProd": "Microsoft.AspNet.Server.Kestrel --config prod.json" }
i uruchom serwer przez użycie
Muszę dodatkowo przypomnieć, że może być wymagane pozwolenie na dodatkowe odsłuchanie i rejestrację (na start
dnx web
). Jest to wymagane ze względu na zaporę ogniową i lokalne bezpieczeństwo nasłuchiwania nowych portów TCP / HTTP. Coś jak poniżej powinno spowodować lokalną rejestrację i nasłuchiwanie portu 5000 dla wszystkich (IPv4 i IPv6):Aby być bezpieczniejszym, możesz dostosować powyższą konfigurację, aby przyznać minimalne uprawnienia.
AKTUALIZACJA: Dzięki @BlaneBunderson. Można użyć * zamiast adresu IP (np.
http://*:5000
), Aby nasłuchiwać na dowolnych adresach IP4 i IP6 z dowolnego interfejsu. Należy być ostrożnym i nie używać ichhttp://*:5000;http://::5000
http://::5000;http://*:5000
http://*:5000;http://0.0.0.0:5000
http://*:5000;http://0.0.0.0:5000
ponieważ będzie wymagało dwukrotnej rejestracji adresu IP6
::
lub adresu IP4 .0.0.0.0
Odpowiada ogłoszeniu
Myślę, że zachowanie można zmienić w przyszłości. Tak więc polecam tylko używać
*:5000
,0.0.0.0:5000
i::5000
tworzą dla rejestracji z dowolnego adresu IT.ZAKTUALIZOWANO 2: ASP.NET Core RC2 zmienia (zobacz ogłoszenie ) zachowanie ładowania wartości domyślnych.
Main
Aby załadować ustawienia zhosting.json
i parametry wiersza poleceń, należy wprowadzić zmiany . Poniżej znajduje się przykład użyciapublic 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(); }
Powyższy kod użycie trzy Wiązania:
"http://*:1000"
,"https://*:1234"
,"http://0.0.0.0:5000"
domyślnie zamiast wykorzystania stanu domyślnego portu 5000 domyślnie (a dokładnie użyciehttp://localhost:5000
). Wezwanie.UseConfiguration(config)
są wykonywane później.UseUrls
. W ten sposób konfiguracja załadowana zhosting.json
lub wiersz poleceń nadpisuje domyślne opcje. Jeśli usunie się jeden.SetBasePath(Directory.GetCurrentDirectory())
wiersz, plikhosting.json
zostanie załadowany z tego samego katalogu, w którym zostanie skompilowana biblioteka dll aplikacji (na przykładbin\Debug\netcoreapp1.0
).Można użyć wykonania jak
dotnet.exe run --server.urls=http://0.0.0.0:5000
nadpisać ustawienia domyślne (z
UseUrls
) i ustawienia"server.urls"
właściwości z,hosting.json
jeśli istnieją.W ten sam sposób można nadpisać ustawienia ULR, ustawiając zmienną środowiskową
set ASPNETCORE_SERVER.URLS=http://localhost:12541/
wtedy domyślny start aplikacji za pomocą
dotnet.exe run
będzie używanyhttp://localhost:12541/
do wiązania.Możesz znaleźć tutaj przykład użycia wiązania HTTPS.
UWAGA: nazwa zmiennej środowiskowej jest zmieniana z
ASPNETCORE_SERVER.URLS
naASPNETCORE_URLS
w nowszych wersjach ASP.NET (zobacz tutaj dokumentację ASP.NET Core 3.1).źródło
http://*:5000
to to samo, cohttp://::5000;http://0.0.0.0:5000
i niehttp://0.0.0.0:5000
. Wymusza nasłuchiwanie zarówno dla IPv4, jak i IPv6. Możesz to zweryfikować za pomocąhttp://*:5000;http://::5000
lubhttp://::5000;http://*:5000
. Podczas rejestrowania drugiego adresu pojawia się błąd „Microsoft.AspNet.Server.Kestrel.Networking.UvException: Error -4091 EADDRINUSE adres już używany”. W niektórych scenariuszach rejestracja zarówno IPv4, jak i IPv6 jest dobra, w innych scenariuszach nie jest dobra. W każdym razie dobrze jest wspomnieć o drodze..UseStartup<Startup>()
nadpisałby.UseConfiguration(config)
w przykładzie z „aktualizacją 2”?W RC2 sekcja poleceń projektu.json nie jest już używana. Nie pobrałem jeszcze Kestrel do pobrania hostingu.json, ale możesz programowo ustawić port w sekcji głównej aplikacji, w której jest tworzony i konfigurowany nowy WebHostBuilder. Po prostu dodaj metodę .UseUrls () jak w przykładzie poniżej
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(); }
źródło
.UseUrls("http://*:5000")
Zamiast tego użyłem i przekierowałem port 5000 z pustym adresem IP hosta na VirtualBox, a na koniec mogę uzyskać dostęp do punktów końcowych platformy .NET Core hostowanych przez platformę Docker z mojego komputera Mac. Słodkie!Jeśli używasz asp.net core 2.1 +, zmodyfikuj sekcję konfiguracji w appsettings.json.
"Kestrel": { "EndPoints": { "Http": { "Url": "http://0.0.0.0:5002" } } },
źródło
ASPNETCORE_URLS
nie działa dla mnieJeśli próbujesz umieścić aplikację ASP.NET Core w kontenerze Docker (co było moim przypadkiem użycia, gdy trzeba było nasłuchiwać adresów hosta innego niż lokalny), pamiętaj, że ten przypadek użycia został już przygotowany przez firmę Microsoft. Możesz zobaczyć pełną chwałę na https://hub.docker.com/r/microsoft/aspnetcore/
W chwili obecnej (wersja 1.0.1) kluczowym elementem rozwiązania tego problemu jest to, że źródłowy plik Dockerfile zawiera ustawienie zmiennej środowiskowej adresu URL, a aplikacja nie próbuje tego przesłonić. (Rzeczywiście, aplikacja kontenerowa powinna wewnętrznie potwierdzać jak najmniej informacji o środowisku, w którym będzie działać).
ENV ASPNETCORE_URLS http://+:80
Zwróć uwagę na znak plus zamiast gwiazdki. Właściwie polecam odwiedzenie powyższego linku dockerhub, zamiast czytania mojej odpowiedzi, o ile link jest dobry. Wersja 1.1 jest tuż za rogiem i w przyszłości sytuacja może się ponownie zmienić.
Podczas uruchamiania kontenera pamiętaj o udostępnieniu portu gościa 80 zgodnie z ustawieniem zmiennej środowiskowej. Na przykład:
docker run -d -p 8000:80 myapp curl localhost:8000
źródło
W przypadku AspNetCore 3.1+ wystarczy dodać następujący wiersz w pliku
appsettings.json
:"Urls": "http://*:80"
źródło
hosting.json
nie działają.Ustaw zmienną środowiskową
ASPNETCORE_URLS
nahttp://0.0.0.0:5000/
.W przypadku uruchamiania z programu Visual Studio należy dodać zmienną środowiskową z karty Debugowanie we właściwościach projektu.
źródło