miércoles, 17 de agosto de 2016

AspNet Core en el Bash on Ubuntu on Windows

La nueva consola del Windows 10, trae tanto alegrías como frustraciones. Ya comentamos que algunos atajos de teclado no funcionan, pero es que no funciona ni el proyecto web que se crear con el comando dotnet.

Anteriormente en no compila explicamos que para crear un proyecto web y ejecutarlo por consola tan solo hay que escribir:

dotnet new -t:web
dotnet restore
dotnet run

Pero si esto lo ejecutamos en el Bash en Windows, veremos que da el siguiente error: Error -98 EADDRINUSE address already in use
¿Qué ha pasado? Por defecto las aplicaciones web de Asp.Net Core usan el servidor Krestel y el puerto 5000. ¿hay algo que está ocupando el puerto 5000? aunque cambies de puerto, seguirá dando el mismo error.
Desconozco la causa del problema, ya hay varios casos abiertos. En uno de ellos, un empleado de Microsoft comenta que por ahora en el Bash en Ubuntu en Windows no soportan que el mismo puerto se esté usando desde una IP6 y una IP4. Así que si cambiamos la ruta que escucha la aplicación por defecto a 127.0.0.1:5000 o [::1]:5000 la aplicación funcionará.

Es decir: para hacer funcionar una aplicación web de Asp.Net Core en el Bash en Ubuntu en Windows hay que cambiar la configuración por defecto de la aplicación, para que escuche en una url que no utilice la palabra localhost.
Para hacerlo tan solo hay que usar la función UseUrls al configurar el WebHostBuilder de la aplicación.
Por ejemplo si queremos que nuestra aplicación responda por ip4 a localhost hay que modificar el fichero Program.cs del proyecto creado por consola:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;

namespace WebApplication
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var host = new WebHostBuilder()
                .UseKestrel()
                .UseContentRoot(Directory.GetCurrentDirectory())
                .UseIISIntegration()
                .UseStartup<Startup>()
                .UseUrls("http://127.0.0.1:5000")
                .Build();

            host.Run();
        }
    }
}

Con la nueva consola esperaba poder deshacerme de la maquina virtual de Ubuntu para probar los desarrollos en Windows y Linux, se ve que por ahora habrá que esperar a que la herramienta esté más madura (y es que aún está en Beta).

No hay comentarios:

Publicar un comentario