Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Nota
Para ASP.NET en .NET Framework, consulte Configurar una aplicación de ASP.NET para Azure App Service. Si la aplicación ASP.NET Core se ejecuta en un contenedor personalizado de Windows o Linux, consulte Configuración de un contenedor personalizado para Azure App Service.
Las aplicaciones de ASP.NET Core deben implementarse en Azure App Service como binarios compilados. La herramienta de publicación de Visual Studio compila la solución y, a continuación, implementa los archivos binarios compilados directamente. El motor de implementación de App Service implementa primero el repositorio de código y, a continuación, compila los archivos binarios.
Esta guía incluye conceptos clave e instrucciones para los desarrolladores de ASP.NET Core. Si es la primera vez que usa Azure App Service, siga primero el inicio rápido de ASP.NET Core y ASP.NET Core con SQL Database.
Mostrar las versiones compatibles del entorno de ejecución de .NET Core
En App Service, las instancias de Windows ya tienen instaladas todas las versiones compatibles de .NET Core. Para ver las versiones del entorno de ejecución y del SDK de .NET Core que están disponibles, vaya al sitio de Kudu.
Vaya a la aplicación en Azure Portal y, a continuación, seleccione Herramientasavanzadas>. Seleccione Continuar. En Kudu, seleccione Consola de depuración para CMD o PowerShell.
Ejecute el siguiente comando en la consola basada en explorador:
dotnet --info
Mostrar la versión de .NET Core
Para mostrar la versión actual de .NET Core, ejecute el siguiente comando en Azure Cloud Shell:
az webapp config show --resource-group <resource-group-name> --name <app-name> --query linuxFxVersion
Para mostrar todas las versiones de .NET Core compatibles, ejecute el siguiente comando en Cloud Shell:
az webapp list-runtimes --os linux | grep DOTNET
Establecer la versión de .NET Core
Establezca el marco de destino en el archivo de proyecto para el proyecto de ASP.NET Core. Para obtener más información, consulte Selección de la versión de .NET Core que se va a usar.
Para establecer la versión de .NET Core en 8.0, ejecute el siguiente comando en Cloud Shell:
az webapp config set --name <app-name> --resource-group <resource-group-name> --linux-fx-version "DOTNETCORE|8.0"
¿Qué ocurre con los tiempos de ejecución obsoletos en App Service?
Los tiempos de ejecución obsoletos están en desuso por parte de la organización de mantenimiento o han detectado que tienen vulnerabilidades significativas. En consecuencia, se eliminan de las páginas de creación y configuración en el portal. Cuando un tiempo de ejecución obsoleto está oculto en el portal, cualquier aplicación que siga usando ese tiempo de ejecución continúa ejecutándose.
Si quiere crear una aplicación con una versión en tiempo de ejecución obsoleta que ya no se muestra en el portal, use la CLI de Azure, la plantilla de ARM o Bicep. Estas alternativas de implementación permiten crear entornos de ejecución en desuso que se han quitado en el portal, pero aún se admiten.
Si un entorno de ejecución se quita completamente de la plataforma de App Service, el propietario de la suscripción de Azure recibe un aviso por correo electrónico antes de la eliminación.
Personalización de la automatización de compilaciones
Si implementa la aplicación mediante paquetes Git o ZIP con la automatización de compilación habilitada, la automatización de compilación de App Service sigue esta secuencia:
- Ejecute un script personalizado si está especificado en
PRE_BUILD_SCRIPT_PATH
. - Para restaurar las dependencias de NuGet, ejecute
dotnet restore
. - Para compilar un binario para producción, ejecute
dotnet publish
. - Ejecute un script personalizado si está especificado en
POST_BUILD_SCRIPT_PATH
.
PRE_BUILD_COMMAND
y POST_BUILD_COMMAND
son variables de entorno que, de forma predeterminada, están vacías. Para ejecutar comandos anteriores a la compilación, defina PRE_BUILD_COMMAND
. Para ejecutar comandos posteriores a la compilación, defina POST_BUILD_COMMAND
.
En el ejemplo siguiente se especifican las dos variables para una serie de comandos, separados por comas.
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings PRE_BUILD_COMMAND="echo foo, scripts/prebuild.sh"
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings POST_BUILD_COMMAND="echo foo, scripts/postbuild.sh"
Para ver otras variables de entorno que puede usar para personalizar la automatización de compilación, consulte Configuración de Oryx.
Para más información acerca de cómo se ejecuta App Service y se compilan aplicaciones de ASP.NET Core en Linux, consulte el siguiente artículo de la documentación de Oryx sobre la detección y compilación de aplicaciones de .NET Core.
Acceso a variables de entorno
En App Service, puede establecer la configuración de la aplicación fuera del código de la aplicación. A continuación, puede acceder a ellos en cualquier clase mediante el patrón estándar de inserción de dependencias ASP.NET Core:
using Microsoft.Extensions.Configuration;
namespace SomeNamespace
{
public class SomeClass
{
private IConfiguration _configuration;
public SomeClass(IConfiguration configuration)
{
_configuration = configuration;
}
public SomeMethod()
{
// retrieve nested App Service app setting
var myHierarchicalConfig = _configuration["My:Hierarchical:Config:Data"];
// retrieve App Service connection string
var myConnString = _configuration.GetConnectionString("MyDbConnection");
}
}
}
Si configuras un ajuste de aplicación con el mismo nombre en "App Service" y en appsettings.json
, por ejemplo, el valor de "App Service" tiene prioridad sobre el valor de appsettings.json
. Con el valor local appsettings.json
, puede depurar la aplicación localmente. No obstante, si usa el valor de App Service, puede ejecutar la aplicación en producción con la configuración de producción. Las cadenas de conexión funcionan de la misma manera. Con este método, puede mantener los secretos de aplicación fuera del repositorio de código y acceder a los valores adecuados sin cambiar el código.
Nota
También puede considerar opciones de conectividad más seguras que no requieran secretos de conexión. Para más información, consulte Conectividad segura a servicios y bases de datos de Azure desde Azure App Service.
Se obtiene acceso a los datos de configuración jerárquicos de appsettings.json
mediante el delimitador __
(subrayado doble) que es estándar en Linux a .NET Core. Para invalidar una opción de configuración jerárquica específica en App Service, establezca el nombre de configuración de la aplicación con el mismo formato delimitado en la clave. Puede ejecutar el ejemplo siguiente en Cloud Shell:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings My__Hierarchical__Config__Data="some value"
Se obtiene acceso a los datos de configuración jerárquicos en appsettings.json
mediante el delimitador estándar para .NET Core :
. Para invalidar una opción de configuración jerárquica específica en App Service, establezca el nombre de configuración de la aplicación con el mismo formato delimitado en la clave. Puede ejecutar el ejemplo siguiente en Azure Cloud Shell:
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings My:Hierarchical:Config:Data="some value"
Implementar soluciones de varios proyectos
Cuando una solución de Visual Studio incluye varios proyectos, el proceso de publicación de Visual Studio selecciona automáticamente el proyecto que se va a implementar. Al implementar en el motor de implementación de App Service, como con Git, o con la implementación ZIP con la automatización de compilación habilitada, el motor de implementación de App Service elige el primer sitio web o proyecto de aplicación web que encuentra como la aplicación de App Service. Para especificar el proyecto que App Service debe usar, especifique la configuración de la aplicación PROJECT
. Por ejemplo, ejecute el siguiente comando en Cloud Shell:
az webapp config appsettings set --resource-group <resource-group-name> --name <app-name> --settings PROJECT="<project-name>/<project-name>.csproj"
Acceso a los registros de diagnóstico
ASP.NET Core ofrece un proveedor de registro integrado para App Service. En el archivo program.cs
de tu proyecto, agrega el proveedor a tu aplicación a través del método de extensión ConfigureLogging
, como se muestra en el ejemplo siguiente.
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.AddAzureWebAppDiagnostics();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Después, podrá configurar y generar registros con el patrón de .NET Core estándar.
Para acceder a los registros de consola generados dentro del código de su aplicación en App Service, active el registro de diagnóstico ejecute el siguiente comando en Cloud Shell:
az webapp log config --resource-group <resource-group-name> --name <app-name> --docker-container-logging filesystem --level Verbose
Los valores posibles para --level
son Error
, Warning
, Info
y Verbose
. Cada nivel subsiguiente incluye el nivel anterior. Por ejemplo, Error
solo incluye mensajes de error.
Verbose
incluye todos los mensajes.
Después de activar el registro de diagnóstico, ejecute el siguiente comando para ver la secuencia de registro:
az webapp log tail --resource-group <resource-group-name> --name <app-name>
Si los registros de consola no aparecen inmediatamente, vuelva a comprobar en 30 segundos.
Para detener el streaming de registros en cualquier momento, seleccione Ctrl+C.
Para más información sobre la solución de problemas de aplicaciones ASP.NET Core en App Service, consulte Solución de problemas de ASP.NET Core en Azure App Service e IIS.
Acceso a una página de excepciones detalladas
Cuando la aplicación ASP.NET Core genera una excepción en el depurador de Visual Studio, el explorador muestra una página de excepción detallada, pero en App Service esa página se reemplaza por un "HTTP 500" genérico o "Error al procesar la solicitud". Para mostrar la página de excepciones detallada en App Service, agregue la configuración de la ASPNETCORE_ENVIRONMENT
aplicación a la aplicación mediante la ejecución del siguiente comando en Cloud Shell.
az webapp config appsettings set --name <app-name> --resource-group <resource-group-name> --settings ASPNETCORE_ENVIRONMENT="Development"
Detección de sesión de HTTPS
En App Service, la terminación de TLS/SSL se produce en los equilibradores de carga de red, por lo que todas las solicitudes HTTPS llegan a la aplicación como solicitudes HTTP sin cifrar. Si la lógica de la aplicación necesita saber si las solicitudes de usuario están cifradas, configure el middleware de encabezados reenviados en Startup.cs
.
- Configure el middleware con
ForwardedHeadersOptions
para reenviar los encabezadosX-Forwarded-For
yX-Forwarded-Proto
enStartup.ConfigureServices
. - Agregue intervalos de direcciones IP privadas a las redes conocidas, de modo que el middleware pueda confiar en el equilibrador de carga de App Service.
- Invoque el
UseForwardedHeaders
método enStartup.Configure
antes de llamar a otro middleware.
Al ensamblar los tres elementos, el código tiene el siguiente aspecto:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
// These three subnets encapsulate the applicable Azure subnets. At the moment, it's not possible to narrow it down further.
options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("::ffff:10.0.0.0"), 104));
options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("::ffff:192.168.0.0"), 112));
options.KnownNetworks.Add(new IPNetwork(IPAddress.Parse("::ffff:172.16.0.0"), 108));
});
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseForwardedHeaders();
...
app.UseMvc();
}
Para obtener más información, consulte Configuración de ASP.NET Core para trabajar con servidores proxy y equilibradores de carga.
Reescritura o redireccionamiento de la dirección URL
Para volver a escribir o redirigir una dirección URL, use el middleware de reescritura de direcciones URL en ASP.NET Core.
Abrir sesión SSH en el explorador
Para abrir una sesión SSH directa con el contenedor, la aplicación debe ejecutarse.
Use el comando az webapp ssh .
Si aún no está autenticado, será preciso que se autentique con su suscripción a Azure para conectarse. Una vez autenticado, usted verá un shell en el navegador en el que puede ejecutar comandos dentro de su contenedor.
Nota
Los cambios que realice fuera del /home
directorio se almacenan en el propio contenedor y no se conservan más allá de un reinicio de la aplicación.
Para abrir una sesión remota de SSH desde un equipo local, consulte Abrir sesión SSH desde un shell remoto.
Omitir el mensaje robots933456 en los registros
Es posible que vea el mensaje siguiente en los registros de contenedor:
2019-04-08T14:07:56.641002476Z "-" - - [08/Apr/2019:14:07:56 +0000] "GET /robots933456.txt HTTP/1.1" 404 415 "-" "-"
Puede omitir este mensaje sin problemas.
/robots933456.txt
es un camino de URL ficticio utilizado por App Service para comprobar si el contenedor es capaz de atender las solicitudes. Una respuesta 404 indica que la ruta de acceso no existe y indica a App Service que el contenedor está en buen estado y listo para responder a las solicitudes.