J'ai déployé mon application c #, asp.net 5, mvc 6 sur un serveur Windows 2008. J'ai lancé dnx web
et il écoute le port 5000 et fonctionne correctement lors de l'accès à partir d'un ordinateur local.
Comment puis-je l'obtenir pour écouter des demandes non locales?
P.S. Cette question n'est pas une copie de cela ... il fait référence à asp.net pre RC1 lorsque hosting.ini avait en fait un format .ini. Maintenant, il s’agit de JSON et je ne trouve aucune documentation sur ce qu’elle devrait contenir.
P.P.S. La vraie solution est dans le non-accepté réponse à la question liée, avec une mise en garde massive. Pas:
dnx web
- il échoueradnu restore
Le fichier de configuration par défaut utilisé par le serveur Kestrel est hosting.json
. Le nom a été changé plusieurs fois dans différentes versions bêta. Si vous utilisez maintenant project.json
avec la section suivante "command"
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel"
}
puis lors du démarrage du serveur à partir de la ligne de commande en
dnx web
le fichier hosting.json
sera lu. Le fichier
{
"server.urls": "http://0.0.0.0:5000"
}
va configurer le serveur pour écouter 5000 sur chaque adresse IP4. La configuration
{
"server.urls": "http://::5000;http://0.0.0.0:5000"
}
informera d’écouter 5000 adresses IP4 et IP6.
On peut spécifier d'autres fichiers de configuration en utilisant la variable d'environnement ASPNET_ENV
ou en utilisant --config myconfig1.json
(ou config=myconfig1.json
). Par exemple, vous pouvez utiliser
SET ASPNET_ENV=Development
et créer le fichier hosting.Development.json
avec une configuration spécifique. Vous pouvez également utiliser project.json
avec
"commands": {
"web": "Microsoft.AspNet.Server.Kestrel"
"webProd": "Microsoft.AspNet.Server.Kestrel --config prod.json"
}
et démarrez le serveur par usage
dnx webProd
Je dois également rappeler qu'il peut être nécessaire d'autoriser l'écoute et l'enregistrement (pour démarrer dnx web
). Cela est nécessaire en raison du pare-feu et de la sécurité locale d'écoute des nouveaux ports TCP/HTTP. Quelque chose comme ci-dessous devrait rendre l'enregistrement et l'écoute locaux du port 5000 pour tout le monde (IPv4 et IPv6):
netsh http add iplisten ipaddress=0.0.0.0:5000
netsh http add iplisten ipaddress=::5000
netsh http add urlacl url=http://+:5000/ user=\Everyone
Pour plus de sécurité, vous pouvez ajuster la configuration ci-dessus afin d’accorder des droits minimaux.
MIS À JOUR: Merci @BlaneBunderson. On peut utiliser * à la place de l'adresse IP (comme http://*:5000
) pour écouter toutes les adresses IP4 et IP6 à partir de n'importe quelle interface. Il faut être prudent et ne pas utiliser http://*:5000;http://::5000
, http://::5000;http://*:5000
, http://*:5000;http://0.0.0.0:5000
ou http://*:5000;http://0.0.0.0:5000
car il faudra enregistrer l'adresse IP6 ::
ou l'adresse IP4 0.0.0.0
deux fois .
Correspond à l'annonce
Techniquement, tout nom d'hôte qui n'est pas "localhost" ou une adresse IPv4 ou IPv6 valide entraînera la liaison de Kestrel à toutes les interfaces réseau.
Je pense que le comportement pourrait être changé à l'avenir. Ainsi, je recommanderais d'utiliser uniquement les formulaires *:5000
, 0.0.0.0:5000
et ::5000
pour l'enregistrement de toute adresse informatique.
UPDATED 2: ASP.NET Core RC2 modifie (voir l'annonce ) le comportement du chargement des valeurs par défaut. Il faut modifier la variable Main
pour charger les paramètres de hosting.json
et les paramètres de la ligne de commande. Ci-dessous un exemple d'utilisation
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();
}
Le code ci-dessus utilise trois liaisons: "http://*:1000"
, "https://*:1234"
, "http://0.0.0.0:5000"
par défaut au lieu d'utiliser le port par défaut 5000 par défaut (pour utiliser exactement http://localhost:5000
). Les appels de .UseConfiguration(config)
sont effectués après .UseUrls
. Ainsi, la configuration chargée à partir de hosting.json
ou la ligne de commande remplace les options par défaut. Si vous supprimez une ligne .SetBasePath(Directory.GetCurrentDirectory())
, le hosting.json
sera chargé à partir du même répertoire que celui où la DLL d'application sera compilée (par exemple bin\Debug\netcoreapp1.0
).
On peut utiliser l'exécution comme
dotnet.exe run --server.urls=http://0.0.0.0:5000
pour écraser les paramètres par défaut (de UseUrls
) et ceux de "server.urls"
, propriété de hosting.json
s’il existe.
De la même manière, on pourrait écraser les paramètres ULR en définissant la variable d'environnement
set ASPNETCORE_SERVER.URLS=http://localhost:12541/
alors le démarrage par défaut de l'application utilisant dotnet.exe run
utilisera http://localhost:12541/
pour la liaison.
Vous pouvez trouver ici un exemple d'utilisation de la liaison HTTPS.
Dans RC2, la section des commandes de project.json n'est plus utilisée. Je n'ai pas encore demandé à Kestrel de prendre hosting.json, mais vous pouvez définir le port par programme dans le menu principal de l'application où le nouveau WebHostBuilder est créé et configuré. Ajoutez simplement la méthode .UseUrls () comme dans l'exemple ci-dessous
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();
}
Si vous essayez de placer une application ASP.NET Core dans un conteneur Docker (ce qui était mon cas d'utilisation pour avoir besoin d'écouter des adresses non-hôte local), notez que ce cas d'utilisation a déjà été mis en place pour vous par Microsoft. Vous pouvez voir toute la gloire sur https://hub.docker.com/r/Microsoft/aspnetcore/
À la version actuelle (v1.0.1), la solution miracle pour résoudre ce problème est que le fichier Dockerfile source contient un paramètre de variable d'environnement url et que l'application ne tente pas de le remplacer. (En effet, une application conteneurisée doit en interne indiquer le moins possible l’environnement dans lequel elle sera exécutée.)
ENV ASPNETCORE_URLS http://+:80
Notez le signe plus plutôt que l'astérisque. En fait, je recommande de visiter le lien ci-dessus sur dockerhub plutôt que de lire ma réponse tant que le lien est bon. La version 1.1 est proche, et les choses pourraient changer à nouveau.
Lors de l'exécution du conteneur, veillez à exposer le port d'invité 80, conformément au paramètre de variable d'environnement. Par exemple:
docker run -d -p 8000:80 myapp
curl localhost:8000
Si vous utilisez asp.net core 2.1 +, modifiez la section de configuration dans appsettings.json.
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://0.0.0.0:5002"
}
}
},