webhostbuilder usekestrel que net español asp c# asp.net asp.net-core dnx kestrel-http-server

c# - usekestrel - ¿Cómo hago para que el servidor web de Kestrel escuche solicitudes que no son de host local?



que es kestrel (4)

El archivo de configuración predeterminado utilizado por el servidor Kestrel es hosting.json . El nombre fue cambiado varias veces en diferentes versiones beta. Si usa ahora project.json con la siguiente sección de "command"

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

luego, durante el inicio del servidor desde la línea de comandos

dnx web

se leerá el archivo hosting.json . El archivo

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

configurará el servidor para escuchar 5000 en cada dirección IP4. La configuración

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

informará para escuchar 5000 en ambas direcciones IP4 e IP6.

Se pueden especificar archivos de configuración alternativos mediante el uso de la variable de entorno ASPNET_ENV o mediante el uso de --config myconfig1.json (o config=myconfig1.json ). Por ejemplo, puedes usar

SET ASPNET_ENV=Development

y para crear el archivo hosting.Development.json con una configuración específica. Alternativamente, puede usar project.json con

"commands": { "web": "Microsoft.AspNet.Server.Kestrel" "webProd": "Microsoft.AspNet.Server.Kestrel --config prod.json" }

e iniciar el servidor por uso

dnx webProd

Debo recordar además que podría ser necesario que permitas escuchar y registrarte adicionalmente (para iniciar dnx web ). Se requiere debido al firewall y la seguridad local de escuchar nuevos puertos TCP / HTTP. Algo como a continuación debería hacer que el registro local y la escucha de 5000 puertos para todos (IPv4 e 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

Para estar más seguro, puede ajustar la configuración anterior para otorgar derechos mínimos.

ACTUALIZADO: Gracias @BlaneBunderson. Se puede usar * en lugar de la dirección IP (como http://*:5000 ) para escuchar cualquier dirección IP4 e IP6 desde cualquier interfaz. Se debe tener cuidado y no usar http://*:5000;http://::5000 , http://::5000;http://*:5000 , http://*:5000;http://0.0.0.0:5000 o http://*:5000;http://0.0.0.0:5000 porque requerirá registrar la dirección IP6 :: o la dirección IP4 0.0.0.0 dos veces .

Corresponde al anuncio

Técnicamente, cualquier nombre de host que no sea "localhost" o una dirección IPv4 o IPv6 válida hará que Kestrel se una a todas las interfaces de red.

Creo que el comportamiento podría cambiarse en el futuro. Por lo tanto, recomendaría usar solo *:5000 , 0.0.0.0:5000 y ::5000 para registrar cualquier dirección de TI.

ACTUALIZADO 2: ASP.NET Core RC2 cambia (vea el anuncio ) el comportamiento de cargar los valores predeterminados. Hay que hacer cambios en el Main para cargar la configuración de hosting.json y los parámetros de la línea de comandos. A continuación se muestra un ejemplo del uso

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(); }

El código anterior utiliza tres enlaces: "http://*:1000" , "https://*:1234" , "http://0.0.0.0:5000" de forma predeterminada en lugar de usar el puerto predeterminado 5000 de forma predeterminada ( para ser exactos el uso de http://localhost:5000 ). La llamada a .UseConfiguration(config) se realiza después de .UseUrls . Por lo tanto, la configuración cargada desde hosting.json o la línea de comando sobrescribe las opciones predeterminadas. Si se elimina la línea .SetBasePath(Directory.GetCurrentDirectory()) , el hosting.json se cargará desde el mismo directorio donde se compilará la aplicación dll (por ejemplo, bin/Debug/netcoreapp1.0 ).

Uno puede usar la ejecución como

dotnet.exe run --server.urls=http://0.0.0.0:5000

para sobrescribir la configuración predeterminada (de UseUrls ) y la configuración de la propiedad "server.urls" de hosting.json si existe.

Del mismo modo, se podría sobrescribir la configuración de ULR configurando la variable de entorno

set ASPNETCORE_SERVER.URLS=http://localhost:12541/

entonces el inicio predeterminado de la aplicación que utiliza dotnet.exe run http://localhost:12541/ para el enlace.

Puede encontrar here un ejemplo del uso del enlace HTTPS.

Implementé mi aplicación c #, asp.net 5, mvc 6 en un servidor Windows 2008. He encendido dnx web y está escuchando el puerto 5000 y funciona bien cuando accedo desde una computadora local.

¿Cómo consigo que escuche las solicitudes no locales de host?

PD Esta question no es un duplicado de esto ... se refiere a asp.net pre RC1 cuando hosting.ini realmente tenía un formato .ini. Ahora, es JSON y no puedo encontrar ninguna documentación sobre lo que realmente debería estar en él.

PPS La solución real está en la answer no aceptada a la pregunta vinculada, con una advertencia masiva. Pasos:

  1. Cambie su project.json por la respuesta vinculada.
  2. Publique su proyecto en su servidor.
  3. En el servidor, vaya a la carpeta ... / approot / src / YourProject y abra una ventana de comandos allí.
  4. Ejecute dnx web : fallará
  5. Ejecutar dnu restore
  6. Ejecute ''dnu build`
  7. Ejecute ''dnx web`: el servidor web ahora debería comenzar bien

En RC2, la sección de comandos de project.json ya no se usa. Todavía no he conseguido que Kestrel recoja hosting.json, pero puede configurar programáticamente el puerto en Main de la aplicación donde se crea y configura el nuevo WebHostBuilder. Simplemente agregue el método .UseUrls () como en el ejemplo a continuación

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 está tratando de poner una aplicación ASP.NET Core dentro de un contenedor acoplable (que fue mi caso de uso para tener que escuchar direcciones que no son de host local), tenga en cuenta que Microsoft ya ha preparado este caso de uso. Puede ver toda la gloria en https://hub.docker.com/r/microsoft/aspnetcore/

En la actualidad (v1.0.1), la magia clave para resolver este problema es que el Dockerfile de origen contiene una configuración de variable de entorno url, y la aplicación no intenta anular esto. (De hecho, una aplicación en contenedor debería afirmar internamente lo menos posible sobre el entorno donde se ejecutará).

ENV ASPNETCORE_URLS http://+:80

Tenga en cuenta el signo más en lugar de un asterisco allí. De hecho, recomiendo visitar el enlace dockerhub anterior antes de leer mi respuesta siempre que el enlace sea bueno. La versión 1.1 está a la vuelta de la esquina, y las cosas pueden cambiar nuevamente en el futuro.

Al ejecutar el contenedor, asegúrese de exponer el puerto invitado 80, según la configuración de la variable de entorno. Por ejemplo:

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


Si usa asp.net core 2.1 +, modifique la sección de configuración en appsettings.json.

"Kestrel": { "EndPoints": { "Http": { "Url": "http://0.0.0.0:5002" } }

},