Implementar aplicaciones de ASP.NET Core en Azure App Service

Azure App Service es un servicio de plataforma de informática en la nube de Microsoft que sirve para hospedar aplicaciones web, como ASP.NET Core.

Patrones de aplicación web confiable

Consulte El patrón de aplicación web confiable para .NETen los vídeos de YouTube y el artículo para obtener instrucciones sobre cómo crear una aplicación moderna, confiable, que se puede probar, rentable y escalable de ASP.NET Core, ya sea desde cero o refactorizando una aplicación existente.

Recursos útiles

La documentación de App Service es un recurso que incluye documentación, tutoriales, ejemplos, guías de procedimientos y otros recursos de aplicaciones de Azure. Dos tutoriales importantes que pertenecen al hospedaje de aplicaciones de ASP.NET Core son:

Creación de una aplicación web ASP.NET Core en Azure
Usar Visual Studio para crear e implementar una aplicación web de ASP.NET Core para Azure App Service en Windows.

Creación de una aplicación ASP.NET Core en App Service en Linux
Usar la línea de comandos para crear e implementar una aplicación web de ASP.NET Core para Azure App Service en Linux.

Consulte el panel ASP.NET Core en App Service para ver la versión de ASP.NET Core disponible en Azure App Service.

Suscríbase al repositorio App Service Announcements y supervise los problemas. El equipo de App Service publica periódicamente los anuncios y escenarios que llegan a App Service.

Los artículos siguientes están disponibles en la documentación de ASP.NET Core:

Publicar una aplicación de ASP.NET Core en Azure con Visual Studio
Obtenga información sobre cómo publicar una aplicación de ASP.NET Core en Azure App Service con Visual Studio.

Cree su primera canalización
Configure una compilación de integración continua para una aplicación de ASP.NET Core y, después, cree una versión de implementación continua para Azure App Service.

Espacio aislado de Azure Web App
Detecte limitaciones de ejecución en tiempo de ejecución de Azure App Service aplicadas por la plataforma de aplicaciones de Azure.

Solución de problemas y depuración de proyectos de ASP.NET Core
Conozca y solucione advertencias y errores en proyectos de ASP.NET Core.

Configuración de aplicaciones

Plataforma

La arquitectura de plataforma (x86/x64) de una aplicación de App Services se establece en la configuración de la aplicación de Azure Portal para las aplicaciones hospedadas en un cálculo de serie A (básico) o en un nivel de hospedaje superior. Confirme que la configuración de publicación de la aplicación (por ejemplo, en el perfil de publicación [.pubxml]) de Visual Studio coincide con los valores de configuración de servicio de la aplicación en Azure Portal.

Los runtimes para aplicaciones de 64 bits (x64) y 32 bits (x86) están presentes en Azure App Service. El SDK de .NET Core que está disponible en App Service es para 32 bits, pero es posible implementar aplicaciones de 64 bits compiladas localmente con la consola de Kudu o el proceso de publicación de Visual Studio. Para obtener más información, consulte la sección Publicar e implementar la aplicación.

En el caso de las aplicaciones con dependencias nativas, los runtimes de 32 bits (x86) están presentes Azure App Service. El SDK de .NET Core disponible en App Service es de 32 bits.

Para obtener más detalles sobre los componentes y los métodos de distribución del marco .NET Core —por ejemplo, información sobre .NET Core Runtime—, consulte Sobre .NET Core: Composición.

Paquetes

Incluya los siguientes paquetes de NuGet para proporcionar características de registro automáticas para aplicaciones implementadas en Azure App Service:

Se debe hacer referencia explícita a los paquetes anteriores en el archivo del proyecto de la aplicación.

Invalidación de la configuración de la aplicación mediante Azure Portal

La configuración de la aplicación en Azure Portal le permite establecer variables de entorno para la aplicación. El proveedor de configuración de variables de entorno puede consumir las variables de entorno.

Cuando una configuración de aplicación se crea o modifica en Azure Portal y el botón Guardar está seleccionado, se reinicia la aplicación de Azure. La variable de entorno está disponible para la aplicación después de que se reinicie el servicio.

Cuando una aplicación usa el host genérico, las variables de entorno se cargan en la configuración de la aplicación cuando se llama a CreateDefaultBuilder para compilar el host. Para más información, vea Host genérico de .NET en ASP.NET Core y Proveedor de configuración de variables de entorno.

La configuración de la aplicación en Azure Portal le permite establecer variables de entorno para la aplicación. El proveedor de configuración de variables de entorno puede consumir las variables de entorno.

Cuando una configuración de aplicación se crea o modifica en Azure Portal y el botón Guardar está seleccionado, se reinicia la aplicación de Azure. La variable de entorno está disponible para la aplicación después de que se reinicie el servicio.

Cuando una aplicación usa el host web, las variables de entorno se cargan en la configuración de la aplicación cuando se llama a CreateDefaultBuilder para compilar el host. Para más información, vea Host web de ASP.NET Core y Proveedor de configuración de variables de entorno.

Escenarios de servidor proxy y equilibrador de carga

El middleware de integración con IIS, que configura el software intermedio de encabezados reenviados al hospedar fuera de proceso, y el módulo de ASP.NET Core están configurados para reenviar el esquema (HTTP/HTTPS) y la dirección IP remota donde se originó la solicitud. Podría ser necesario realizar una configuración adicional para las aplicaciones hospedadas detrás de servidores proxy y equilibradores de carga adicionales. Para más información, vea Configurar ASP.NET Core para trabajar con servidores proxy y equilibradores de carga.

Supervisión y registro

Las aplicaciones ASP.NET Core implementadas de forma automática en App Service reciben una extensión de App Service, Integración de registro de ASP.NET Core. La extensión habilita la integración de registro para las aplicaciones ASP.NET Core en Azure App Service.

Las aplicaciones de ASP.NET Core implementadas automáticamente en App Service reciben una extensión de App Service, Extensiones de registro de ASP.NET Core. La extensión habilita la integración de registro para las aplicaciones ASP.NET Core en Azure App Service.

Para obtener información sobre supervisión, registro y solución de problemas, consulte los artículos siguientes:

Supervisar aplicaciones en Azure App Service
Obtenga información sobre cómo revisar las cuotas y las métricas para las aplicaciones y los planes de App Service.

Habilitar el registro de diagnósticos para las aplicaciones en Azure App Service
Descubra cómo habilitar y acceder a registro de diagnóstico para los códigos de estado HTTP, solicitudes con error y actividad del servidor web.

Controlar errores en ASP.NET Core
Conozca los métodos habituales para controlar los errores en las aplicaciones de ASP.NET Core.

Solución de problemas de ASP.NET Core en Azure App Service e IIS
Obtenga información sobre cómo diagnosticar problemas con las implementaciones de Azure App Service con las aplicaciones de ASP.NET Core.

Solución de problemas comunes para Azure App Service e IIS con ASP.NET Core
Consulte los errores comunes de configuración de implementación para las aplicaciones hospedadas por Azure App Service/IIS con consejos de solución de problemas.

Anillo de clave de protección de datos y ranuras de implementación

Las claves de protección de datos se conservan en la carpeta %HOME%\ASP.NET\DataProtection-Keys. Esta carpeta está respaldada por el almacenamiento de red y se sincroniza en todas las máquinas que hospedan la aplicación. Las claves no están protegidas en reposo. Esta carpeta proporciona el anillo de clave a todas las instancias de una aplicación en una única ranura de implementación. Las ranuras de implementación independientes, por ejemplo, almacenamiento provisional y producción, no comparten ningún anillo de clave.

Al realizar un intercambio entre ranuras de implementación, cualquier sistema que utilice la protección de datos no podrá descifrar los datos almacenados mediante el anillo de clave situado dentro de la ranura anterior. El middleware de Cookie de ASP.NET usa protección de datos para proteger sus cookies. Esto hace que los usuarios cierren sesión en una aplicación que usa el middleware de Cookie de ASP.NET estándar. Para una solución de anillo de clave independiente de la ranura, utilice un proveedor de anillo de clave externo, como estos:

  • Azure Blob Storage
  • Azure Key Vault
  • Almacén SQL
  • Redis Cache

Para más información, vea Proveedores de almacenamiento de claves en ASP.NET Core.

Implementación de una aplicación ASP.NET Core que usa una versión preliminar de .NET Core

Para implementar una aplicación que usa una versión preliminar de .NET Core, consulte los siguientes recursos. Estos enfoques también se usan cuando el entorno de ejecución está disponible pero el SDK no se ha instalado en Azure App Service.

Consulte el panel ASP.NET Core en App Service para ver la versión de ASP.NET Core disponible en Azure App Service.

Vea Selección de la versión de .NET Core que se va a usar para obtener información sobre cómo seleccionar la versión del SDK de .NET para implementaciones autocontenidas.

Especificación de la versión del SDK de .NET Core con Azure Pipelines

Use los escenarios de CI/CD de Azure App Service para configurar una compilación de integración continua con Azure DevOps. Después de crear la compilación de Azure DevOps, tiene la opción de configurar la compilación para usar una versión específica del SDK.

Especificación de la versión del SDK de .NET Core

Al usar el centro de implementación de App Service para crear una compilación de Azure DevOps, la canalización de compilación predeterminada incluye los pasos Restore, Build, Test y Publish. Para especificar la versión del SDK, seleccione el botón Add (+) (Agregar [+]) en la lista de trabajos del agente para agregar un nuevo paso. Busque .NET Core SDK (SDK de .NET Core) en la barra de búsqueda.

Add the .NET Core SDK step

Mueva el paso a la primera posición de la compilación para que los pasos siguientes usen la versión especificada del SDK de .NET Core. Especifique la versión del SDK de .NET Core. En este ejemplo, el SDK se establece en 3.0.100.

Completed SDK step

Para publicar una implementación independiente (SCD), configúrela en el paso Publish y proporcione el identificador en tiempo de ejecución (RID).

Self-contained publish

Implementación de la versión preliminar de una aplicación independiente

Una implementación independiente (SCD) que tiene como destino un entorno de ejecución en versión preliminar transporta el entorno de ejecución en versión preliminar en la implementación.

Al implementar una aplicación independiente:

Siga las instrucciones de la sección Implementación de la aplicación independiente.

Usar Docker con Web Apps para contenedores

Docker Hub en https://hub.docker.com/_/microsoft-dotnet contiene las imágenes de Docker de versión preliminar más recientes. Las imágenes se pueden usar como base. Use la imagen y efectúe la implementación en Web App for Containers con normalidad.

Instalación de la extensión de sitio de versión preliminar

Si tiene algún problema al usar la extensión de sitio de versión preliminar, abra una incidencia de dotnet/AspNetCore.

  1. En Azure Portal, vaya a App Service.
  2. Seleccione la aplicación web.
  3. Escriba "ex" en el cuadro de búsqueda para filtrar por "Extensiones" o desplácese hacia abajo en la lista de herramientas de administración.
  4. Seleccione Extensiones.
  5. Seleccione Agregar.
  6. Seleccione la extensión Runtime de ASP.NET Core {X.Y} ({x64|x86}) en la lista, en la que {X.Y} es la versión preliminar de ASP.NET Core y {x64|x86} especifica la plataforma.
  7. Seleccione Aceptar para aceptar los términos legales.
  8. Seleccione Aceptar para instalar la extensión.

Cuando se complete la operación, se instalará la versión preliminar de .NET Core. Compruebe la instalación:

  1. Seleccione Herramientas avanzadas.

  2. Seleccione Ir en Herramientas avanzadas.

  3. Seleccione el elemento de menú Consola de depuración>PowerShell.

  4. Ejecute el siguiente comando en el símbolo del sistema de PowerShell: Sustituya la versión de runtime de ASP.NET Core por {X.Y} y la plataforma por {PLATFORM} en el comando:

    Test-Path D:\home\SiteExtensions\AspNetCoreRuntime.{X.Y}.{PLATFORM}\
    

    El comando devuelve True cuando está instalado el runtime de la versión preliminar de x64.

Nota:

La arquitectura de plataforma (x86/x64) de una aplicación de App Services se establece en la configuración de la aplicación de Azure Portal para las aplicaciones hospedadas en un cálculo de serie A (básico) o en un nivel de hospedaje superior. Confirme que la configuración de publicación de la aplicación (por ejemplo, en el perfil de publicación [.pubxml]) de Visual Studio coincide con los valores de configuración de servicio de la aplicación en Azure Portal.

Si la aplicación se ejecuta en modo de en proceso y la arquitectura de plataforma está configurada para 64 bits (x64), el módulo ASP.NET Core usa el runtime de la versión preliminar de 64 bits, si está presente. Instale la extensión del entorno de ejecución de ASP.NET Core {X.Y} (x64) mediante Azure Portal.

Después de instalar el entorno de ejecución de la versión preliminar de x64, ejecute el siguiente comando en la ventana de comandos de Kudu PowerShell de Azure para comprobar la instalación. Sustituya la versión del entorno de ejecución de ASP.NET Core por {X.Y} en el comando siguiente:

Test-Path D:\home\SiteExtensions\AspNetCoreRuntime.{X.Y}.x64\

El comando devuelve True cuando está instalado el runtime de la versión preliminar de x64.

Nota:

Con Extensiones de ASP.NET Core se obtienen funciones adicionales para ASP.NET Core en Azure App Services, como habilitar el registro de Azure. La extensión se instala automáticamente cuando se implementa desde Visual Studio. Si no se instala la extensión, instálela para la aplicación.

Uso de la extensión de sitio de versión preliminar con una plantilla de ARM

Si usa una plantilla de ARM para crear e implementar aplicaciones, puede usar el tipo de recurso Microsoft.Web/sites/siteextensions para agregar la extensión de sitio a una aplicación web. En el ejemplo siguiente, la extensión de sitio de ASP.NET Core 5.0 (x64) Runtime (AspNetCoreRuntime.5.0.x64) se agrega a la aplicación:

{
    ...
    "parameters": {
        "site_name": {
            "defaultValue": "{SITE NAME}",
            "type": "String"
        },
        ...
    },       
    ...
    "resources": [
        ...
        {
            "type": "Microsoft.Web/sites/siteextensions",
            "apiVersion": "2018-11-01",
            "name": "[concat(parameters('site_name'), '/AspNetCoreRuntime.5.0.x64')]",
            "location": "[resourceGroup().location]",
            "dependsOn": [
                "[resourceId('Microsoft.Web/sites', parameters('site_name'))]"
            ]
        }
    ]
}
    

Para el marcador de posición {SITE NAME}, use el nombre de la aplicación en Azure App Service (por ejemplo, contoso).

Publicar e implementar la aplicación

Para una implementación de 64 bits:

  • Use un SDK de .NET Core de 64 bits para compilar una aplicación de 64 bits.
  • Establezca la Plataforma en 64 bits en Configuración>Configuración general de App Service. La aplicación debe usar un plan de servicio básico o superior para habilitar la elección del valor de bits de la plataforma.

Implementación de la aplicación dependiente del marco de trabajo

  1. Haga clic con el botón derecho en el proyecto, en el Explorador de soluciones, y seleccione Publicar. Como alternativa, seleccione Compilar>Publicar {nombre de la aplicación} desde la barra de herramientas de Visual Studio.
  2. En el cuadro de diálogo Publicar, seleccione Azure>Siguiente.
  3. Seleccione el servicio de Azure.
  4. Seleccione Advanced (Avanzadas). Se abre el cuadro de diálogo Publicar.
  5. Seleccione un grupo de recursos y un plan de hospedaje, o cree uno.
  6. Seleccione Finalizar.
  7. En la página Publicar:
    • En Configuración, seleccione el icono de lápiz Editar configuración:
      • Confirme que está seleccionada la configuración de Versión.
      • En la lista desplegable Modo de implementación, seleccione Dependiente de marco de trabajo.
      • En la lista desplegable Tiempo de ejecución de destino, seleccione el tiempo de ejecución deseado. El valor predeterminado es win-x86.
    • Para quitar archivos adicionales tras la implementación, abra Opciones de publicación de archivos y seleccione la casilla de verificación para quitar archivos adicionales en el destino.
    • Seleccione Guardar.
    • Seleccione Publish.

Implementación de la aplicación independiente

Use Visual Studio o la CLI de .NET Core para una implementación autocontenida (SCD).

  1. Haga clic con el botón derecho en el proyecto, en el Explorador de soluciones, y seleccione Publicar. Como alternativa, seleccione Compilar>Publicar {nombre de la aplicación} desde la barra de herramientas de Visual Studio.
  2. En el cuadro de diálogo Publicar, seleccione Azure>Siguiente.
  3. Seleccione el servicio de Azure.
  4. Seleccione Advanced (Avanzadas). Se abre el cuadro de diálogo Publicar.
  5. Seleccione un grupo de recursos y un plan de hospedaje, o cree uno.
  6. Seleccione Finalizar.
  7. En la página Publicar:
    • En Configuración, seleccione el icono de lápiz Editar configuración:
      • Confirme que está seleccionada la configuración de Versión.
      • En la lista desplegable Modo de implementación, seleccione Independiente.
      • En la lista desplegable Tiempo de ejecución de destino, seleccione el tiempo de ejecución deseado. El valor predeterminado es win-x86.
    • Para quitar archivos adicionales tras la implementación, abra Opciones de publicación de archivos y seleccione la casilla de verificación para quitar archivos adicionales en el destino.
    • Seleccione Guardar.
    • Seleccione Publish.

Configuración del protocolo (HTTPS)

Los enlaces de protocolo seguro permiten especificar un certificado para usarlo al responder a solicitudes a través de HTTPS. Los enlaces requieren un certificado privado válido (.pfx) que se haya emitido para el nombre de host en cuestión. Para obtener más información, vea Tutorial: Enlace de un certificado SSL personalizado existente con Azure App Service.

Transformación de web.config

Si necesita transformar web.config al realizar la publicación (por ejemplo, establecer variables de entorno basadas en la configuración, el perfil o el entorno), consulte Transformación de web.config.

Recursos adicionales

Azure App Service en Windows Server utiliza Internet Information Services (IIS). Kestrel y YARP en el front-end proporciona el equilibrador de carga. Los temas siguientes se aplican a la tecnología subyacente de IIS: