Conectar un Azure App Service mediante Filezilla

Introducción

Azure app Service es una solución de servicio como plataforma (PaaS) que nos ofrece la nube de Azure entre su vasta cantidad de soluciones, desde poder desarrollar nuestras aplicaciones web, subir una API, trabajar hasta con aplicaciones de terceros, sin preocuparte acerca de la administración de su infraestructura.

tradicionalmente un deploy de cualquier aplicación web debe de requerir no solamente en la planificación de su arquitectura desde el punto de vista del desarrollo sino también considerar la parte de toda la infraestructura que se debe desarrollar o crear como por ejemplo las redes, balanceo de cargas, tolerancia a fallos, tener alta disponibilidad entre algunas cosas que deben ser consideradas que debemos de manejar en nuestras aplicaciones.

Una vez desplegado estos sistemas o estas aplicaciones web o API en general bajo un entorno de producción se necesita darle mantenimiento ahí es donde entran nuestro personal de infraestructura lo cual monitorean la salud de estas aplicaciones.

toda esa responsabilidad esta resumida con esta solución que llegó hacia los desarrolladores como caída del cielo llamada Azure app Service, donde nos da la facilidad de crear aplicaciones y desplegar las mismas de una manera super fácil sin necesidad de preocuparnos por toda esa capa de mantenimiento e infraestructura vital para tener nuestras aplicaciones encendidas y totalmente funcionales.

Que aprenderás en este articulo:

  1. Aprenderás a crear una App Service directamente desde el portal de Azure
  2. Podrás conectarte mediante el protocolo FTP a la app web de app Service mediante la aplicación Filezilla
  3. Poder hacer respaldos y gestión de los archivos y carpetas en esa instancia de App Service mediante Filezilla por el protocolo FTP

Requisitos básicos:

  1. Filezilla (https://filezilla-project.org/download.php?platform=win64)
  2. Una cuenta de Azure (https://docs.microsoft.com/en-us/learn/modules/create-an-azure-account/)
  3. Ganas de aprender

Creación de un App Service

Lo primero que debemos de hacer para poner en práctica este artículo es empezar a preparar todos los recursos necesarios en la nube de Azure pero para ello primero debemos de crear nuestra cuenta de Azure, sí ya la posees entonces ya te puedes saltar este paso e ingresar al portal principal de Azure (https://portal.azure.com) dónde vamos a seleccionar en el botón de hamburguesa en la esquina superior izquierda del portal principal le vamos a dar clic en la primera opción como aparece en la siguiente imagen.

Azure predefine una serie de elementos comunes para crear en sus recursos, para este articulo vamos a hacer clic en la opción Web App como se muestra a continuación.

Una vez ido al formulario de creación de una web app para App Services vamos a seleccionar la suscripción como primera opción, luego vamos a crear un recurso nuevo, en mi caso yo le llame Demos, como siguiente opción damos un nombre a la web app, esta a la vez será la url a la cual vamos a acceder desde la internet yo le llame demoappservicefilezilla, en publicación dejamos en la opción Código, luego en la opción Runtime la verdad puedes elegir cualquiera, el interés de este demo es acceder a los archivos que están en este espacio reservado para alojar nuestra app, en mi caso seleccione .NET 5, en la opción de sistema operativo lo dejamos como quedo por defecto, en este caso Windows y en la región, agreguen la que mas les haga sentido, para este demo seleccione South Central US.

en la sección de App service plan, yo como no tenia ninguna nueva le di a crear nuevo plan y del lado derecho se va a desplegar una página donde aparecerán los distintos esquemas de precios que nos ofrece app service para hospedar, primero seleccionar en sus distintos ambientes (Dev/Test – Production – Isolated), vamos a hacer para efectos de este demo clic en la primera opción (Dev / Test) y seleccionaremos el tier F1 que es gratuito donde nos ofrece 1 GB de memoria y 60 minutos al día de cómputo, esto quiere decir que entre cada transacción ya sea de request o response este nos va a consumir dentro de nuestro rango de tiempo que ofrece diario este tier que no sobrepase de los 60 minutos lo cual para pruebas y demos esta mas que suficiente, mas no es una instancia que debemos dejar luego cuando queramos ir a producción o ambientes más públicos.

Luego de seleccionar o crear el plan de app service y aplicamos los cambios le damos a revisar y crear para que nos envíe a la siguiente pagina donde nos va a mostrar un resumen de todas las configuraciones seleccionadas hacemos clic en el botón crear para que Azure proceda a crear nuestra app web como se muestran en la siguiente imagen.

Una vez creado el recurso, vamos a ello haciendo clic en el botón Go to resource

Para comprobar que todo esta al 100% funcional con nuestra app web vamos a buscar la opción de Browse en la pagina principal del recurso que pertenece a nuestra app web o bien ubicar la opción URL y hacer clic en la opción de copiar y pegar la ruta en nuestro navegador web para confirmar que ya tenemos nuestra app web ejecutándose sin problemas como se muestra a continuación.

De esta manera ya tenemos creada nuestra app web mediante el cual nos vamos a poder conectar mediante ftp con Filezilla y gestionar los archivos que se encuentran hospedados en ese recurso.

Conectar App Service mediante Filezilla

Aquí el truco para conectarnos mediante ftp a cualquier web app es obtener el perfil de publicación que nos ofrece app service en la pagina principal de aquel recurso que creemos, vamos a ubicar la opción Get Publish Profile y hacemos clic para descargar el archivo con extensión .PublishSettings como se muestra a continuación.

Una vez descargado el archivo lo ubicamos y abrimos con nuestro bloc de notas y vamos a hacer clic en la opción formato y hacemos clic en ajuste de línea para que no se abra el archivo y se muestre todo en 1 sola línea y se vea mas entendible el archivo, luego vamos a notar que parece código xml con configuración relevante usuarios, contraseñas, urls, en realidad lo que estas descargando son los perfiles para conexión mediante ftp, ftp pasivo y webapp que luego veremos en otros artículos como sacarles el máximo provecho para hacer liberaciones de nuestras aplicaciones de una manera más rápida y sencilla, continuando con el articulo vamos a ubicar el tag de publishProfile y para que sea mas entendible hagamos enter para dar espacios y de ahí sacar el perfil que nos interesa que es el FTP como se muestra en las siguientes imágenes.

Ok entonces ya teniendo los datos de conexión abrimos Filezilla y hacemos clic en el primer icono del lado izquierdo que es donde se nos va a desplegar una ventana de configuración de conexiones y vamos a hacer clic en la opción New Site, le damos un nombre a nuestro site, en mi caso coloque DemoAzureAppService como se muestra a continuación.

A este paso veremos del lado derecho de la ventana de conexión una serie de valores que vamos a rellenar con las configuraciones que ya tenemos del archivo publishProfile donde vamos a copiar el publishUrl y lo vamos a pegar en la casilla de host como primer paso, luego seguimos con el usuario y contraseña es mas que obvio ubicarlo en el bloc de notas los copiamos y pegamos y hacemos clic en Connect como se muestra en la siguiente imagen.

Hasta este paso ya vamos muy bien, solamente se nos mostrará una ventana mostrándonos el certificado de conexión entrante que nos permitirá hacer conexión con el recurso de Azure mediante el protocolo FTP, simplemente hacemos clic en OK.

Hasta este punto ya nos podemos conectar mediante ftp a nuestra web app y poder hacer gestión de nuestros archivos, en este caso solo se ve un archivo que es el que predefine Azure al momento de crear un recurso de app service que es el archivo hostingstart.html.

Respaldar y hacer cambios en nuestros archivos

En los pasos previos ya nos pudimos conectar mediante Filezilla a nuestro espacio reservado donde tenemos los archivos que pertenecen a nuestra app web, por ahora tenemos el único archivo que automáticamente genera Azure, pero ya hasta aquí podríamos subir archivos pertinentes a un portal web, modificar imágenes, cambiar nombres y permisos a carpetas, para hacer una prueba si cualquier cambio surte efecto hacemos clic en la carpeta wwwroot, y en la lista de abajo nos va a aparecer el archivo hostingstart.html le damos clic derecho y hacemos clic en la opción View/Edit.

Nos abrirá el bloc de notas con todo el contenido en html donde vamos a buscar el tag de title y solamente voy a cambiar las líneas del titulo para ver el cambio en tiempo real luego de guardar el archivo como se muestra en la siguiente imagen.

Se nos mostrara una ventana donde vamos a confirmar los cambios realizados en el servidor propiamente en el archivo hostingstart.html y hacemos clic en Yes.

Vamos a nuestra web app de Azure y copiamos la url o hacemos clic en browse y nos mostrara los cambios que hicimos directamente desde FTP al archivo html que previamente modificamos.

Conclusión

De esta manera ya como lo vimos en los pasos anteriores podemos demostrar de una manera rápida el aprovechamiento de la herramienta de Filezilla para gestionar los archivos ya almacenados en esa instancia de app service, ya sea para configurar algunas cosas que quedaron pendientes, alguna modificación de un parámetro o variable en una configuración por ambientes, algún respaldo, algún archivo faltante por reemplazar o añadir, en fin.

Accediendo de manera rápida mediante Filezilla podemos controlar más cómodamente nuestras instancias de App service, si se esta al tanto y se conoce de que ya se puede hacer gestión mediante otros recursos mediante ya sea el App Service Editor que aun sigue en fase preview a día de hoy así como también mediante KUDU, el CLI y también herramientas como Powershell pero nada quita la comodidad de arrastrar y soltar archivos de manera fácil mediante Filezilla o algún programa de gestión de archivos mediante el protocolo FTP.

Manejo de Azure Blob Storage mediante el SDK de Azure.

Introducción

La nube de Azure posee una basta cantidad de posibilidades y maneras de trabajar y hacernos más fácil todo a través del cómputo en la nube, una de ellas son los famosos blob storage.

¿Pero entonces que es un blob storage?…

El blob storage de Azure está diseñado para almacenar datos no estructurados, que no tienen una estructura definida. que incluye archivos de texto, imágenes, videos, documentos y mucho más. Una entidad almacenada en el almacenamiento de blobs se denomina blob.

Existen muchas maneras de trabajar un blob storage, en este artículo vamos a desarrollar una forma sencilla de subir contenido ya sea desde un archivo multimedia como una imagen, sonido, vídeo, hasta archivos muy pesados utilizando todo el poder del SDK da Azure.

Qué aprenderás en este artículo:

  1. Conceptos básicos de un blob storage en Azure
  2. Crear un contenedor de blob storage
  3. Conectar una aplicación el C# a Azure mediante su SDK
  4. Subir archivos multimedia mediante el SDK de Azure

Requisitos básicos:

  1. Visual Studio 2019
  2. Una cuenta de Azure (Para esto puedes crear una cuenta nueva sin costo alguno)
  3. .Net Core 5 instalado
  4. Conocimientos básicos de C#
  5. Ganas de aprender

Creación de un contenedor de blob storage

Lo primero que debemos de hacer para poner en práctica este artículo es empezar a preparar todos los recursos necesarios en la nube de Azure pero para ello primero debemos de crear nuestra cuenta de Azure (Creación de una cuenta de Azure – Learn | Microsoft Docs), sí ya la posees entonces ya te puedes saltar este paso e ingresar al portal principal de Azure (https://portal.azure.com) dónde vamos a seleccionar en el botón de hamburguesa en la esquina superior izquierda del portal principal le vamos a dar clic en la primera opción como aparece en la siguiente imagen

Una vez habiendo hecho clic se desplegará una nueva página y vamos a escribir en la barra de búsqueda la palabra blob en sí como se muestra en la siguiente imagen

Al hacer clic nos va a enviar a una nueva página donde va a detallar toda la información relacionada a este recurso dando una introducción los planes de precios uso información soporte y revisiones, así como también una sugerencia de recursos similares al storage account que vamos a crear a continuación le vamos a dar clic al botón crear cómo se muestra en la siguiente imagen

Una vez dado clic en el botón de crear nos va a llevar a una página dónde vamos a empezar a configurar nuestra cuenta de almacenamiento donde el primer valor que nos pide es la suscripción, seleccionamos la suscripción luego el recurso asociado a esa suscripción si no posees un recurso puedes crear uno nuevo dándole al botón debajo de la casilla de texto donde ingresó a ser el recurso dándole a crear nuevo, luego en la sección de detalles de la instancia vamos ahora sí a darle un nombre a nuestra cuenta de almacenamiento para este artículo yo voy a escribir “demostorageazhugh” es de resaltar que el nombre de la cuenta de almacenamiento debe ser con letras minúsculas y el nombre que le vamos a dar debe de ser aceptado por Azure como tal como paso siguiente vamos a seleccionar la región en este caso yo voy a seleccionar “US South Central US” como último paso vamos a seleccionar el performance y la redundancia para este demo vamos a dejarlo en sus valores predeterminados y vamos a seleccionar el botón de revisar y crear como se muestra todo en la siguiente imagen

Una vez que la validación de toda esta configuración que hemos generado ha sido exitosa simplemente lo que hacemos es darle al botón de crear como se muestra en la siguiente imagen

Luego de esperar aquel recurso este creado vamos a ir ahora a acceder a él dándole clic en el botón ir al recurso

Ya accediendo a la página donde nos muestra el recurso que acabamos de generar nos vamos a ir a la sección de data storage en el menú izquierdo vamos a ver una sección que se llama contenedores y vamos a crear un nuevo contenedor dándole clic en el símbolo de más como se muestra en la siguiente imagen

Luego vamos a ir a una ventana que se despliega del lado derecho donde vamos a escribir el nombre del contenedor dónde vamos a almacenar nuestros archivos blog para ello vamos a determinar un nombre en minúscula y que éste sea aceptado por Azure como tal luego en la siguiente sección vamos a ver los niveles de accesos de este contenedor para ello vamos a seleccionar la segunda opción para este artículo como tal de manera de poder darle salida pública a los archivos que más adelante vamos a subir y que puedan ser tanto consumidos tanto leídos como subidos de manera dinámica a través del SDK de Azure, las demás opciones las dejamos como están predeterminadas y hacemos clic en el botón crear

Para asegurarnos que los archivos que vamos a subir se puedan ver de manera correcta a través de una URL de Azure vamos a subir un archivo directamente dándole clic al botón de subir seleccionamos el archivo y luego le damos al botón de subir, luego de subir el archivo vamos a seleccionar el mismo y nos va a aparecer una ventana o una página donde explicara el detalle directamente de todo lo relacionado a ese archivo en sí hay un una propiedad que se llama URL que es donde vamos a copiar ese valor y lo vamos a pegar en el navegador directamente para ver si ya podemos acceder al contenedor en sí como se muestra en las siguientes imágenes

De esta manera ya podemos acceder a nuestros archivos públicamente desde cualquier navegador y ya podemos pasar a generar la aplicación para realizar el consumo ya sea de subida o de descarga de nuestros archivos blob.

Generar la aplicación de consola en visual Studio 2019

Para seguir continuando con el desarrollo de este artículo vamos a abrir visual Studio 2019, luego vamos a ir a la primera ventana de diálogo que nos ofrece visual Studio y vamos a seleccionar la opción de crear un nuevo proyecto como se muestra en la siguiente imagen

Luego nos vamos a ir a la barra de búsqueda y vamos a escribir consola luego esta nos va a filtrar los tipos de aplicaciones soportadas en visual Studio y vamos a seleccionar la primera opción que nos filtra lo cual se llama console application, nótese que existen varios tipos de aplicaciones con el mismo nombre lo único que varía es el tipo del lenguaje y plataforma en la que van a ser configurados y preparados en el entorno de Visual Studio para fines de este ejemplo vamos a trabajar con C# por lo tanto vamos a seleccionar el proyecto correspondiente a la plataforma de desarrollo de C# y .Net Core como se muestra en la siguiente imagen

Le hacemos clic al botón siguiente y nos aparecerá una siguiente ventana en donde vamos a especificar el nombre del proyecto la ubicación del proyecto y vamos a seleccionar nuevamente el botón de siguiente

Luego nos aparecerá información adicional del framework que vamos a utilizar de desarrollo para este caso vamos a seleccionar .Net 5.0 y vamos a hacer clic en el botón crear como se muestra en la siguiente imagen

Hasta este punto ya tenemos configurado el almacenamiento en la nube tenemos los permisos necesarios y ya tenemos nuestra aplicación de consola creada en el entorno de visual Studio 2019.

Instalar y configurar el SDK de Azure

Para instalar el SDK de Azure nuestra solución previamente creada de consola para poder ya sea consumir archivos a través de una descarga, así como colocar o subir estos objetos hacia un contenedor de blogs storage sencillamente lo que hacemos es que damos clic derecho en el proyecto y seleccionamos la opción de manejar los paquetes de NuGet tal como se muestra en la siguiente imagen

Una vez seleccionada la opción nos va a mostrar del lado izquierdo una pestaña donde se va a mostrar el administrador de paquetes de NuGet dónde vamos luego a seleccionar y escribir en la barra de búsqueda de Azure. Storage. Blogs y vamos a seleccionar la primera opción y hacer clic en el botón instalar tal como se muestra en la siguiente imagen

Una vez realizado bien este paso ya podemos trabajar directamente con el SDK de Azure ya solamente nos queda ir de nuevo al portal de Azure y traernos la configuración correspondiente.

Implementación de la solución

Para empezar a consumir el SDK de Azure vamos a realizar un ejercicio de descarga del archivo que probamos al crear el contenedor de blob storage en Azure, luego hacer una subida de una nueva imagen y por último vamos a listar los archivos que ya existen en el contenedor de blob storage para confirmar que existe ya arriba en la nube.

Como primer paso a implementar vayámonos de nuevo al portal de Azure y vamos a ir a la sección del storage account que ya habíamos generado y vamos a ir a la sección de seguridad y hacemos clic en la opción Access keys como se muestra en la siguiente imagen

A continuación, nos abrirá una nueva pagina donde se mostrarán las llaves de acceso y rotación, así como algunos datos relevantes conformes a la seguridad de estas llaves, vamos a hacer clic en la primera opción para mostrar las llaves que a primera vista estarán ocultas y poder copiar la información, para este articulo vamos a copia el Connection String, yo tome la primera llave, pero sin problemas puedes tomar cualquiera de las dos como se muestra a continuación en la siguiente imagen

Esta información del connection string es necesario traérnosla a nuestra aplicación y vamos a crear una variable donde vamos a pegar esta cadena de conexión y también necesitamos el nombre del contenedor que nombramos al crear la cuenta de almacenamiento en este caso le llamamos “demoshugh”, estos dos valores son importantes para poder acceder mediante el SDK de Azure a estos recursos en la nube.

static string storageconnstring = "<Aqui va el connection string>";
static string containerName = "demoshugh";
static string fileToDownload = "azure.png";
static string fileToUpload = "azurelogo.png";
static string filepath = @"C:\DemoFiles\";

además de esos 2 valores crearemos 3 variables mas donde vamos a definir en la variable fileToDownload al nombre del archivo que ya esta arriba en el contenedor de blob, la variable fileToUpload que se refiere al valor del nombre del archivo que esta localmente en el pc y queremos subir a ese contenedor de blob, y por último la variable filePath que es la ruta donde ya esta el archivo a subir y también va a servir para descargar el archivo que tenemos arriba en dicho contenedor de blob.

Se necesitan inicializar los objetos de BlobServiceClient donde vamos a pasar la variable de storageconnstring y también vamos a especificar el nombre del contenedor mediante la función dentro del blobServiceClient llamada GetBlobContainerClient y le pasamos el nombre de la variable containerName

private static void InitializeBlob()
{
   try
   {
     blobServiceClient = new BlobServiceClient(storageconnstring);
     containerClient = blobServiceClient.
                       GetBlobContainerClient(containerName);
   }
   catch (Exception)
   {  
     throw;
   }            
}

Vamos a implementar el método DownloadBlob donde vamos a especificar con el uso del SDK de Azure que archivo queremos descargar y guardar en nuestro pc de la siguiente manera mediante el siguiente fragmento de código fuente a continuación.

private static async Task DownloadBlob()
{
   try
   {                
      BlobClient blobClient = containerClient.GetBlobClient(fileToDownload);
                
      //Download data content of blob and copy to the disc
      using FileStream stream = File.Create(filepath + fileToDownload);
      var result = await blobClient.DownloadToAsync(stream);

      if (result.Status > 200 || result.Status < 300)
      {
         Console.WriteLine("File downloaded sucessfully!");
         return;
      }

      Console.WriteLine("Error to download file!");
      }
   catch (Exception)
   {
      throw;
   }
}

¡Ya creamos el método para descargar un elemento del contenedor de blob, vamos bien no! ahora procederemos a crear el método UploadBlob donde vamos a subir el archivo que tenemos en nuestro equipo para almacenarlo en el contenedor de blob storage como se muestra en el siguiente fragmento de código.

private static async Task UploadBlob()
{
  try
  {                
    BlobClient blobClient = containerClient.
                            GetBlobClient(fileToUpload);
    var result = await blobClient.
                 UploadAsync(filepath + fileToUpload, true);

    if (result.GetRawResponse().Status == 201)
    {
      Console.WriteLine("File uploaded sucessfully!");
      return;
    }

    Console.WriteLine("Error to upload file!");
  }
  catch (Exception)
  {
    throw;
  }
}

Una vez ya creado el método para descargar una imagen, así como también un método para subir una imagen, para asegurar que todos los elementos existen en nuestro contenedor vamos a crear un método para listar u obtener los ítems o archivos guardados en el contenedor mediante el siguiente fragmento de código a continuación.

private static void ListBlobs()
{
  try
  {
    Console.WriteLine($"List of all items in blob {containerName} container");
    Console.WriteLine("------------------------------");
    // Print out all the blob names
    foreach (BlobItem blob in containerClient.GetBlobs())
    {
       Console.WriteLine(blob.Name);
    }
  }
  catch (Exception)
  {
     throw;
  }
}

Ahora juntemos todas las piezas en el punto inicial de la aplicación en el método Main de la aplicación de consola.

        static void Main(string[] args)
        {
            InitializeBlob();
            DownloadBlob().Wait();
            UploadBlob().Wait();
            ListBlobs();
        }

Y de esta manera compilamos y ejecutamos la aplicación, para ver mas detallado todo el proceso es recomendable ejecutar la aplicación aplicando breakpoints en cada método para que veas más detenidamente el flujo de la aplicación.

Conclusión

De esta manera ya como lo vimos en los pasos anteriores podemos demostrar de una manera rápida el aprovechamiento de este SDK de Azure para manejar un contenedor de almacenamiento blob dinámicamente ya sea para subir elementos a ese contenedor como también poder descargar directamente ya sea agregándole una solución de base de datos donde le podríamos guardar la información que esto se genera a través de una ruta o URL  generada en el blob storage como una buena práctica para el manejo de los contenidos multimedia o contenidos de archivos en nuestras aplicaciones.

La nube de Azure posee una gran cantidad de recursos y herramientas que cualquier desarrollador puede sencillamente manejar desde una consola de comandos pasando por un SDK así como también su uso interactivo directamente mediante su portal web, Para una mejor gestión de la información y los recursos que queramos trabajar en la nube ya sea desde una base de datos a una máquina virtual o simplemente un guardado de información relevante para poder utilizarse en cualquiera de nuestras aplicaciones.

Aplicando el patrón MVVM en WPF .NET Core

Acá les dejo la serie de videos que hice para dar mas luz acerca de todas las dudas que poseen sobre este patrón de arquitectura MVVM.

Espero les sea de gran utilidad para sus proyectos en WPF, luego les explicare brevemente en UWP y Xamarin Forms.

Saludos.

Hola mundo .NET Core en Linux

Introducción

En este articulo explicaremos como instalar .NET Core en un sistema operativo Linux (Ubuntu 20.04 LTS) y poder ejecutar aplicaciones .NET Core, además el ejecutarlas y así como también poder correr por ejemplo ASP.NET Core y que se pueda ver del lado del cliente para probar su correcto funcionamiento.

¿Porque ejecutar aplicaciones Microsoft en Linux? Las respuestas pueden ser muchas, podríamos decir por ir más allá de los muros que existían desde mucho tiempo y la “rivalidad” que supuestamente hicieron ver entre estos dos entornos de SO, otra por atraer a toda esa comunidad Linuxera para que puedan trabajar de manera mas cómoda para ellos, aplicaciones C# o paginas web bien soportadas con todo el poder de .NET Core, también otra respuesta puede ser reducir costos en una empresa de desarrollo o para ti mismo como usuario programador, en fin existen muchas razones por las cuales .NET Core tiene soporte sobre sistemas operativos basados en Linux.

.NET Core es compatible con Ubuntu. Este artículo describe cómo instalar .NET Core en Ubuntu. Cuando una versión de Ubuntu deja de ser compatible, .NET Core ya no es compatible con esa versión. Sin embargo, existen instrucciones un poco más personalizadas donde se puede instalar .NET Core en esas versiones.

Distribuciones soportadas

En el siguiente grafico según la fuente (https://docs.microsoft.com/en-us/dotnet/core/install/linux-ubuntu) tenemos la tabla comparativa de versiones con soporte hasta el momento y unas que no lo poseen.

En el caso de este articulo vamos a utilizar Ubuntu 20.04 LTS (https://ubuntu.com/#download) junto con .NET Core 3.1 mas adelante iremos con .NET Core 5.0

Necesitaremos lo siguiente:

  1. Linux instalado en alguna instancia instalada y configurada (https://www.process.st/checklist/ubuntu-server-setup-process/) yo lo deje hasta el paso 14 de esta manera ya tienes una instalación bien configurada.
  2. Putty para acceder vía SSH al servidor de Linux. (https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html ).
  3. Muchas ganas de aprender.

Tabla de contenido:

  1. Instalación de .NET Core 3.1 SDK y Runtime en ambiente Linux.
  2. Creación y compilación de tu primera aplicación en .NET Core.
  3. Creación de una aplicación en ASP.NET Core.
  4. Prueba de nuestra aplicación ASP.NET Core desde un navegador web.

Ahora ejecutamos Putty y colocamos la dirección IP del equipo remoto donde esta nuestro Linux instalado.

A continuación, ya establecemos conexión vía SSH, si todo bien tiene que aparecer la ventana ya del Shell de Linux donde solicita acceso, lo cual son las credenciales previamente configuradas del usuario de Ubuntu (usuario / contraseña).

Hasta este punto ya estamos dentro de la maquina con Linux, ahora bien, como vamos a ejecutar instalaciones, es importante tratar de hacer switch hacia el usuario Root que viene siendo quien tiene mas privilegios a nivel UNIX, por lo tanto, debemos de ejecutar los primeros comandos para cambiar de nuestro usuario normal a Root.

hughfernandez@neptuno:~$ su -

Pedirá la contraseña para usuario Root y hasta este punto ya podemos proceder a instalar .NET Core, pero primero siempre se recomienda ejecutar actualizaciones recientes con los siguientes comandos.

sudo apt-get update        # Obtiene la lista de actualizaciones disponibles.
sudo apt-get upgrade       # Actualiza estrictamente los paquetes actuales
sudo apt-get dist-upgrade  # Instala actualizaciones (nuevas)
sudo reboot		   # Reinicia el sistema operativo

Ya reiniciado el sistema antes de instalar .NET, ejecute los siguientes comandos para agregar la clave de firma del paquete de Microsoft a su lista de claves confiables y agregue el repositorio del paquete.

wget https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb

Instalación del SDK

Para instalar .NET Core SDK, ejecute los siguientes comandos:

  sudo apt-get update; \
  sudo apt-get install -y apt-transport-https && \
  sudo apt-get update && \
  sudo apt-get install -y dotnet-sdk-3.1

Instalación del Runtime

Los siguientes comandos instalan ASP.NET Core Runtime, que es el tiempo de ejecución más compatible para .NET Core. En su terminal, ejecute los siguientes comandos.

Como alternativa al ASP.NET Core Runtime, puede instalar .NET Core Runtime que no incluye el soporte de ASP.NET Core: reemplace aspnetcore-runtime-3.1 en el comando anterior con dotnet-runtime-3.1.

sudo apt-get install -y dotnet-runtime-3.1

Creación y compilación de tu primera aplicación en .NET Core.

De esta manera ya podemos contar con .NET Core 3.1 ya instalado tanto su versión SDK como Runtime para ejecutar nuestras aplicaciones. Si quieres saber que proyectos puedes ejecutar que están incluidos en este framework donde puedes obtener un listado completo ejecutando el siguiente comando:

dotnet new --help

Vamos a empezar nuestro “hola mundo” primeramente llevando un orden donde vamos a tener nuestros proyectos en Linux, para dar avance vamos a la carpeta Home como usuario Root y veremos la carpeta de nuestro usuario de Ubuntu, en este caso mi usuario es “hughfernandez” y ahí dentro vamos a crear la carpeta donde vamos a ejecutar nuestra primera aplicación con el comando.

mkdir holamundoConsola

Accedemos a ella y vemos que no tenemos nada, pero ya estamos sobre la carpeta.

Ejecutamos el siguiente comando:

dotnet new console

Si hacemos una inspección de lo generado listando los archivos de nuestro proyecto de consola con el comando:

ls -1l

Si queremos ya revisar un archivo especifico como por ejemplo “Program.cs” tenemos que ejecutar el siguiente comando (es importante escribir el archivo exactamente como aparece de lo contrario el nano va a abrir un archivo nuevo):

sudo nano Program.cs

Como ven en la imagen anterior ya pude acceder al archivo .cs llamado “Program” y ya pude agregar “Hola mundo desde Linux!”, para guardar los cambios presionamos Control + X, pedirá sobrescribir los cambios y vuelven de nuevo al entorno de comandos de Linux.

Ya hasta este punto ya podemos compilar nuestra aplicación y ejecutarla con los siguientes comandos:

dotnet build
dotnet run

De esta manera ya creamos la solución de consola, ingresamos en el archivo “Program.cs”, modificamos la línea de codigo con nuestro hola mundo y finalmente la compilación y ejecución del programa, pero esta vez bajo un entorno Linux.

Creación de una aplicación en ASP.NET Core.

Para el tema de ASP.NET core debemos de crear la carpeta como en el ejemplo anterior en mi caso le di nombre de “demoAsp”, ingresamos en ella y ejecutamos el siguiente comando para crear un proyecto ASP.NET Core:

dotnet new razor
o
dotnet new mvc

Si se preguntan por el nombre del proyecto, el comando “dotnet new” toma por defecto el nombre de la carpeta que crearon donde están ejecutando el comando.

Para ejecutar nuestra app en ASP.NET Core primero se debe de compilar con el comando “dotnet build” para que genere la carpeta “/bin/Debug/netcoreapp3.1” posteriormente ejecutar el siguiente comando dentro de la última carpeta antes mencionada:

dotnet demoAsp.dll

O para hacer solo una prueba directa si todo bien solo no situamos en la carpeta raíz del proyecto y ejecutamos normalmente el “dotnet run”.

Prueba de nuestra aplicación ASP.NET Core desde un navegador web.

Ya de esta manera ya nuestra aplicación en ASP.NET Core se esta ejecutando en el servidor Kestrel de .NET Core, pero no tenemos aun salida para poder acceder desde un navegador, esto porque se ejecuta dentro de localhost y Linux asume que solo puede acceder desde el propio Linux por lo tanto se debe de ejecutar el siguiente comando:

dotnet run --urls "http://0.0.0.0:5000"

En este caso el argumento “urls” específica a Kestrel en bajo qué direcciones IP y puertos debe escuchar. Por defecto Kestrel solo escuchará a la dirección localhost por lo que debemos especificar de forma explícita que deseamos que escuche a cualquier dirección IP para realizar esta prueba.

Ahora bien para probar que podemos acceder desde cualquier cliente nos vamos al equipo Windows y abrimos cualquier navegador web e ingresamos la dirección ip de la maquina Linux y el puerto 5000 “http://la-ip-de-tu-servidor:5000” para verificar que la aplicación web está funcionando:

Si necesitas que se pueda acceder al sitio web de forma remota (externa) desde otros ordenadores de manera automática sin ejecutar el comando urls lo puedes programar directamente en el proyecto, deberás vincularlo de manera diferente.

Para hacer esto, se debe de acceder en los archivos del proyecto recién creado y abrir “Program.cs”. Aquí agrega una llamada al método “UseUrls” de la siguiente manera:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
  WebHost.CreateDefaultBuilder(args)
    .UseUrls("http://0.0.0.0:5000")
    .UseStartup<Startup>();

Esto vincula el sitio web ASP.NET Core a todas las direcciones IP del servidor, en lugar de solo a localhost, que es lo que hace de manera predeterminada.

Conclusión

Hasta este punto y si pudiste seguir con éxito todos los pasos en este artículo, ya estás en la capacidad de poder realizar lo siguiente.

  1. Configurar el instalar Linux Ubuntu.
  2. Saber acceder remotamente a una maquina Linux mediante protocolo SSH.
  3. Saber instalar tanto SDK como Runtime de .NET Core en la versión que quieras que este disponible.
  4. Saber moverte dentro de los directorios de Linux.
  5. Empezar a generar proyectos en .NET Core en ambiente Linux.
  6. Compilar y poder ejecutar aplicaciones .NET Core en Linux.
  7. Ejecutar una página en ASP.NET Core desde cualquier navegador web.

En una próxima entrega voy a explicarles como se publicar y desplegar una aplicación ASP.NET Core a manera de servicio dentro de Linux, configurar el servidor, aplicar seguridad mediante SSL y hostearlo en un servidor nginx a manera de proxy inverso.

Creando una API RESTful con documentación sobre Azure App Service.

Introducción 

La plataforma de Azure provee un vasto set de capacidades dentro de un modelo de Plataforma como servicio (PaaS) para alojar aplicaciones web y servicios. La plataforma es capaz de ofrecer algo más que solo alojar para ejecutar la lógica en sus aplicaciones; esta también incluye una serie de robustos mecanismos para gestionar todos los aspectos acerca del ciclo de vida de su aplicación web como servicios web respectivamente. 

Azure App Services incluye un numero de características para gestionar sus aplicaciones web y servicios incluyendo Web Apps, Logic Apps, Mobile Apps y API Apps.  De esta manera hacemos introducción para explicar mediante este articulo con un breve ejemplo el uso de estas características para alojar en este caso específico una web API RESTful de manera muy sencilla y en adición a una documentación robusta y dinámica. 

Estas características claves son de primordial importancia para la creación de aplicaciones web modernas a través de la nube de Azure como (PaaS). 

Cuando usted está en el proceso de diseño de una arquitectura de software basada en una aplicación web, una de las capas que necesitara implementar es una API lo cual permite que las capas de su arquitectura puedan comunicarse con cada una de las demás. Independientemente de la arquitectura de su aplicación, esta es una buena oportunidad para que implemente una API RESTful para que dicha intercomunicación suceda con su respectiva documentación para el uso de su API. 

Luego de leer este articulo usted podrá: 

  • Crear una aplicación API RESTful sobre Azure App service. 
  • Crear una documentación bien estructurada para la API utilizando herramientas de código abierto. 

Crear una aplicación API con Azure App Service es un poco similar a crear una aplicación web normal desplegada como un App service. Usted podrá tener las mismas opciones disponibles para su aplicación API que usted tiene para una aplicación web normal. 

Crear e implementar una aplicación API 

Para crear una aplicación API RESTful en Azure App Service existen muchas formas, las maneras más comunes son ya sea mediante el portal de Azure o directamente desde Visual Studio, en este caso vamos a realizar el ejemplo desde Visual Studio 2019: 

  1. Ejecute Visual Studio 2019 y seleccione en la opción Archivo > Nuevo > Proyecto. 
  1. En la ventana emergente de Nuevo Proyecto, seleccione ASP.NET Web Application (.Net Framework) dentro de la categoría de Cloud y haga clic en Siguiente. 
  1. En la ventana emergente de configuración del Nuevo Proyecto, escriba el nombre del proyecto, en la ubicación física en el disco seleccione el tipo de framework .NET a utilizar y luego haga clic en Crear. 
  1. Seleccione la plantilla de Web API en la ventana emergente de configuración de nuevo proyecto y luego haga clic en Crear. 

De esta manera Visual Studio crea un nuevo proyecto web API con la siguiente estructura de archivos en el árbol de archivos en el explorador de la solución: 

Generar la documentación automática de la API usando Swashbuckle 

Swashbuckle es un framework de código abierto muy popular que consiste en un gran ecosistema de herramientas que funcionan para diseñar, construir, documentar, y consumir su RESTful API, lo que lo vuelve la alternativa ideal para crear la documentación de la API de manera más automatizada, el paquete de NuGet está muy bien documentado así que pueden revisar la documentación para más detalles accediendo al proyecto GitHub accediendo al final del artículo. 

Swashbuckle se proporciona a través de un conjunto de paquetes de NuGet: Swashbuckle y Swashbuckle Core. A continuación, siga estos pasos para agregar Swashbuckle a su proyecto de API: 

  1. Instale el paquete de NuGet, lo cual incluye Swashbuckle.Core como una dependencia al momento de instalar usando el siguiente comando desde la consola de paquetes de Nuget: 
Install-Package Swashbuckle 
  1. El paquete de NuGet también instala un archivo de arranque inicial o bootstrapper (App_Start/SwaggerConfig.cs) lo cual habilita las rutas de Swagger al iniciar la aplicación API usando WebActivatorEx. Usted también puede configurar las opciones de Swashbuckle modificando el método de extensión GlobalConfiguration.Configuration.EnableSwagger en el archivo SwaggerConfig.cs. también puede excluir de su API las acciones que han sido marcadas con el decorativo de obsoletas agregando la siguiente configuración: 
public class SwaggerConfig 
{ 
        public static void Register() 
        { 
            var thisAssembly = typeof(SwaggerConfig).Assembly; 
  
            GlobalConfiguration.Configuration 
              .EnableSwagger(c => 
              { 
                ...  
                ... 
              //Set this flag to omit schema property descriptions    for any type properties decorated with the Obsolete attribute 
                      
                c.IgnoreObsoleteProperties(); 
 
               ... 
               ... 
         }); 
      } 
 } 
  1. Modifique las acciones de los controladores en su proyecto API para incluir el atributo swagger para ayudar al generador a construir los metadatos de swagger. 
  1. Swashbuckle está ahora configurado para generar los metadatos Swagger para los endpoints de su API con una simple interfaz de usuario para explorar la metadata. Por ejemplo, el controlador que se lista puede producir la UI que se muestra bastando solo con escribir Swagger en la barra del navegador web seguido de la url de la aplicación web.  

Publicar la API RESTful en Azure App Service 

Hasta este punto ya tenemos el diseño de una API con lo básico para conectar con las demás capas de su proyecto, también contamos con una documentación que ya se genera de manera automática, aprovechando al máximo toda la metadata y definición de su API a través de las acciones de sus controladores, ya preparado lo anterior mencionado hasta este momento para implementar su aplicación API se necesita completar la publicación desde Visual Studio hacia Azure App Service para desplegar su proyecto API en la nube. 

Siga estos pasos para desplegar su proyecto API desde Visual Studio: 

  1. Haga clic derecho sobre el proyecto en el Visual Studio Solution Explorer y luego hacer clic en Publicar.
  1. En la ventana de dialogo de publicación, seleccione en App Service en la parte izquierda superior, luego Crear Nuevo, posteriormente hacer clic en publicar para ir a la configuración de App Service de Azure.

  1. La ventana cambiara y lo enviara a una configuración más específica donde primeramente debe de escribir el nombre de la aplicación a desplegar en Azure App Services, luego seleccione la suscripción a la cual está asociado en su portal de Azure. 
  1. A continuación, se debe de especificar un grupo de recurso dentro de la nube de Azure al cual se va a asignar la aplicación web API como recurso de Azure App Service. 
  1. En el caso de que no posea ningún recurso o quiera crear un nuevo recurso haga clic en nuevo nombre de grupo de recurso a crear. 
  1. Este grupo de recurso por lo general asigna una capacidad de gasto calculado a través de un plan de hosting escalable con más o menos capacidades como lo son por ejemplo uso de RAM o número de procesadores necesarios para la ejecución del API, lo cual por defecto selecciona S1 (1 core, 1.75 GB RAM), en este caso le vamos a bajar escalabilidad del API para efectos de prueba y seleccionamos un plan de costos gratuito, este por ser compartido y además por ser un ambiente inicial de pruebas, cuando ya se quiera escalar más la aplicación o cambiar a un ambiente de más calidad y/o producción se puede optimizar a un plan adecuado para ejecutar de manera eficiente su proyecto API. 
  1. Una vez configurado todo el entorno del proyecto API en Azure App Service, se crea un perfil de publicación en Visual Studio para que cada vez que quiera ejecutar un despliegue de su API con cambios nuevos simplemente le damos a ejecutar la publicación mediante el botón Publicar. Visual Studio procede a compilar e intentar subir todos los archivos del proyecto API hacia la nube de Azure mediante Azure App service, de esta manera ya puede acceder a su API a través de la internet. 
  1. Cuando la publicación de su proyecto API esté finalizado, este abrirá en una nueva ventana de navegador donde se mostrará la página web inicial de publicación. 
  1. Navegaremos hacia la documentación Swagger a través de la ruta /Swagger para ver los detalles de la documentación de la API, además para probar los métodos REST ya expuestos mediante la API. Por ejemplo, http://<SU-API-APP&gt;.azurewebsites.net/swagger/ 

De esta manera ya podemos contar con una aplicación RESTful con una documentación bien estructurada de manera automatizada debidamente ejecutándose a través de la nube de Azure mediante Azure App Service. 

Código fuente 

https://github.com/hughfernandez/API-RESTfull-Demo-Doc-Swagger

XAML Hot Reload for Xamarin.Forms

XAML Hot Reload para Xamarin.Forms acelera su desarrollo y facilita la creación, experimentación e iteración en su interfaz de usuario. Y esto significa que ya no tendrá que reconstruir su aplicación cada vez que modifique su IU, ¡le muestra instantáneamente sus cambios en su aplicación en ejecución!

Una de las nuevas características emocionantes incluidas en esta versión es una vista previa pública de XAML Hot Reload para Xamarin.Forms. Esperamos que esta característica acelere dramáticamente su ciclo de desarrollo interno cuando trabaje con Xamarin.Forms XAML. XAML Hot Reload refleja instantáneamente los cambios que realiza en su aplicación en ejecución, sin necesidad de detener y reconstruir.

Partiendo de los antecedente de Xamarin Live Player hace unos años y el Gorilla player para el desarrollo rapido e intuitivo de intefaces de usuario de una manera mas rapida y dinamica, el Xamarin Hot Reload promete dar una buena impresion bien soportada y por fin estable para nosotros los desarrolladores, que a la final abone mas al desarrollo practico ya merecido de las aplicaciones en Xamarin.Forms de una manera mas amigable y agradable para el desarrollador.

Habilitando el XAML Hot Reload

Como una función de vista previa, XAML Hot Reload for Xamarin.Forms está deshabilitado de forma predeterminada cuando actualiza por primera vez a la última vista previa de Visual Studio 2019 o Visual Studio para Mac. Siga estos pasos para habilitarlo:

Asegúrese de haber instalado la última vista previa que incluye XAML Hot Reload:
         Visual Studio 2019 16.3 Preview 2
         Visual Studio para Mac 8.3 Preview 2
Active Xamarin XAML Hot Reload en la pantalla de configuración:
         En Windows, XAML Hot Reload puede habilitarse marcando la casilla Habilitar Xamarin Hot Reload en:
         Herramientas> Opciones> Xamarin> Hot Reload.

En una Mac, XAML Hot Reload puede habilitarse marcando la casilla Habilitar Xamarin Hot Reload en:
Visual Studio> Preferencias> Proyectos> Xamarin Hot Reload.

Depura tu aplicación Xamarin.Forms para Android o iOS y edita un archivo XAML mientras tu aplicación se está ejecutando. Los cambios se aplicarán automáticamente a la aplicación en ejecución cuando presione Guardar.

Nota: Si formó parte de la vista previa privada, puede encontrar información adicional sobre la actualización a la vista previa pública aquí.

¿Como funciona?

Antes de volverse loco tratando de recargar todo, es importante comprender la funcionalidad y las limitaciones de XAML Hot Reload para Xamarin.Forms. Cuando guarda los cambios en un archivo XAML de Xamarin.Forms, XAML Hot Reload entra en acción:

  •     Primero, XAML Hot Reload identifica el objeto de tiempo de ejecución que corresponde al objeto de nivel superior del archivo XAML que se editó. Si la vista o página no está cargada actualmente, el cambio se guarda para más adelante.
  •     El cargador XAML Xamarin.Forms se ejecuta nuevamente en el objeto existente, restableciendo sus propiedades y recreando sus hijos desde el archivo XAML modificado.
  •     Se vuelve a llamar al método InitializeComponent en el objeto para volver a conectar los objetos recién inflados a cualquier controlador de eventos o propiedades x : Name que pueda tener en su código.

Como puede suponer, este enfoque conlleva algunas limitaciones:

  •     Los cambios de código y recursos no se vuelven a cargar. Solo puede recargar cambios a XAML. Los cambios en su código (incluidos elementos como agregar nuevos controladores de eventos o recursos, como imágenes o CSS) no se volverán a cargar.
  •     Algún estado de vista puede perderse en la recarga. Si está modificando la apariencia o el estilo de sus vistas en el código, así como en XAML, esas modificaciones no se pueden volver a aplicar después de una recarga. Esto se debe a que es posible que el código no se vuelva a ejecutar en los objetos XAML recién inflados.

Una lista más completa de limitaciones conocidas está disponible en el sitio de documentación. En la mayoría de los casos, XAML Hot Reload es lo suficientemente resistente como para manejar con gracia los cambios no admitidos. Indicará XAML no válido u otros problemas con IntelliSense cuando edite su archivo XAML.

Conclusión

Esperemos esta nueva herramienta (Lo cual ya deberia de estar disponible hace muchisimo tiempo), no vuelva a ser promesas y termine microsoft de pasar la pagina con esa deuda para nosotros los desarrolladores que siempre queremos mas practicidad en nuestras tareas y que la tecnologia como Xamarin.Forms sea cada dia mas atractiva para nuevos desarrolladores y sea tanto hoy como para el futuro una tecnologia de primera a la hora de pensar en el desarrollo de aplicaciones moviles.

Por ahora sigamos cambiando la rueda mientras manejamos esta tecnologia….

Microsoft .NET Framework 4.8

Estamos encantados de anunciar el lanzamiento de .NET Framework 4.8. Se incluye en la actualización de Windows 10 de mayo de 2019. .NET Framework 4.8 también está disponible en Windows 7+ y Windows Server 2008 R2 +.

Puede instalar .NET 4.8 desde nuestro sitio de descarga .NET. Para crear aplicaciones dirigidas a .NET Framework 4.8, puede descargar NET 4.8 Developer Pack. Si solo desea el tiempo de ejecución de .NET 4.8, puede probar:

.NET 4.8 Web installer: requiere una conexión a Internet durante la instalación.
 .NET 4.8 Offline installer: se puede descargar e instalar más tarde en un estado desconectado.

Mejoras en la versión

.NET Framework 4.8 incluye un conjunto de herramientas actualizado, así como mejoras en varias áreas:

     [Tiempo de ejecución] Mejoras JIT y NGEN
     [BCL] ZLib actualizado
     [BCL] Reducción del impacto de FIPS en la criptografía
     [WinForms] Mejoras de accesibilidad
     [WCF] Mejoras de comportamiento del servicio
     [WPF] Mejoras de alta DPI, Mejoras de automatización UIA

Puede ver la lista completa de mejoras en las notas de la versión de .NET Framework 4.8. Las fuentes de referencia también se han actualizado para .NET 4.8.

Versiones de Windows compatibles

Versiones de cliente de Windows: Windows 10 versión 1903, Windows 10 versión 1809, Windows 10 versión 1803, Windows 10 versión 1709, Windows 10 versión 1703, Windows 10 versión 1607, Windows 8.1, Windows 7 SP1
Versiones de Windows Server: Windows Server 2019, Windows Server versión 1803, Windows Server 2016, Windows Server 2012, Windows Server 2012 R2, Windows Server 2008 R2 SP1

Pruebe estas mejoras en .NET Framework 4.8 y comparta sus comentarios en los comentarios a continuación o a través de GitHub.

¡Gracias!