Va un post rapidito, pero que seguro que puede ahorrar quebraderos de cabeza a más de uno que se encuentre con este problema al iniciar desde Visual Studio una aplicación ASP.NET, ASP.NET Core MVC/Web API, Razor Pages, o incluso Blazor que utilicen por debajo IIS Express.
El problema ocurre justo al ejecutar la aplicación con F5 o Ctrl+F5 desde el entorno de desarrollo; en ese momento, la ejecución se detiene y aparece un cuadro de diálogo con el mensaje:
"Unable to connect to web server 'IIS Express'"
Creo que llevo años encontrándome de vez en cuando con este problema al arrancar las aplicaciones, y nunca entendí muy bien por qué pasaba. Buscaba por la red y solo encontraba soluciones relativas a eliminar el archivo de configuración applicationhost.config
que Visual Studio guarda en la carpeta ".vs" de la solución, a reiniciar el IDE o incluso la máquina, abrirlo como Administrador, o cambiar el puerto en la configuración del proyecto, normalmente algunas unidades por arriba o por abajo que el puerto asignado inicialmente.
Esta última opción es la que más veces me ha funcionado, pero no siempre iba bien, por lo que al final tampoco la identifiqué como una clara receta para paliar el problema que nos ocupa.
Hace unos días me ha vuelto a ocurrir con un proyecto que uso muy a menudo, y, de un día para otro, ha dejado de funcionar y ha comenzado a lanzarme a la cara el maldito cuadro de diálogo. La diferencia es que por fin he podido encontrar una respuesta satisfactoria, al menos para alguno de los escenarios que pueden causar el error :)
El motivo de este error es que Windows ha reservado para su uso interno el puerto utilizado por la aplicación, por lo que no podemos utilizarlo con IIS Express. La solución es sencilla: debemos cambiarlo por otro que esté libre.
Y claro, la cuestión es saber qué puertos están libres en el equipo.
Para ello, podemos ejecutar la siguiente instrucción de la consola, que nos mostrará justamente lo contrario, es decir, los puertos reservados:
C:\>netsh interface ipv4 show excludedportrange protocol=tcp
Protocolo tcp Intervalos de exclusión de puertos
Puerto de inicio Puerto final
---------- --------
2869 2869
4800 4800
5357 5357
8145 8145
9009 9009
50000 50059 *
54950 55049
55050 55149
55454 55553
55554 55653
61566 61665
61666 61765
61766 61865
61866 61965
63053 63152
63153 63252
63353 63452
63453 63552
63858 63957
63958 64057
64058 64157
64158 64257
* - Exclusiones de puertos administrados.
C:\>_
Lo que vemos en el listado son rangos de puertos. Por ejemplo, podemos ver que están ocupados desde el 50000 hasta el 50059, o desde el 64158 hasta el 64257. Si nuestro proyecto usa uno de ellos, se generará el maldito error (que, dicho sea de paso, ya podría dar algo más de información sobre lo que ocurre...)
Sabiendo esto, ya es fácil localizar un puerto libre. En mi caso podemos ver que el 51001 está libre, así que solo hay que modificarlo en las propiedades del proyecto:
¡Espero que os sea de ayuda!
Publicado en Variable not found.
13 Comentarios:
Acabas de darme una respuesta que he buscado más de una década! Y leyéndolo se ve lógico, claro. Pero lo que dices, una pequeña explicación en el error habría ayudado mucho...
Gracias una vez más!!
Muchas gracias amigo, tremenda solución.
Gracias por dedicar tu tiempo sin nada a cambio, ojalá existieran más personas así.
Me alegra saber que os es de utilidad, ¡muchas gracias por comentar!
Es la primera vez que soluciono un bug sin recurrir a stackoverflow jaja muchas gracias por compartir tu solución!
Genial! :D
Muchas gracias por comentar!
Funciona perfecto, gracias por compartir la solución
Estimado, me a sido de gran ayuda su aporte, nada mas que decir que estoy muy agradecido del gran apoyo la comunidad... :)
saludos... y gracias
Me ha ayudado a solucionarlo, gracias
Si os sirve de ayuda también me he encontrado con que el IIS Express lanza ese mensaje si la url a la que se está accediendo esta dentro nuestra reserva de url (urlacl)
netsh http show urlacl
Reservas de direcciones URL:
----------------------------
Dirección URL reservada : https://+:54503/
Usuario: \Todos
Escuchar: Yes
Delegar: No
SDDL: D:(A;;GX;;;WD)
Para solucionarlo simplemente hay que borrar esa entrada
netsh http delete urlacl url=https://+:54503/
y listo, todo vuelve a conectar.
Excelente info!
Gracias hermano, de verdad que me salvaste de una buena. Hice una actualización y windows me ocupó el puerto que yo utilizaba en una aplicación web, en mi trabajo. Me estaba volviendo loco y tu solución, me lo arregló.
Por suerte esta entrada aparecía de las primeras en Google y resolví rápidamente el problema. Gracias!
José Maria Muchas gracias por el post. Tu solucion propuesta funciona perfectamente.
Muchas muchas gracias.
Enviar un nuevo comentario