Logo de IISProxySi desarrollas aplicaciones web con la plataforma .NET de Microsoft en Windows, seguro que usas Visual Studio. Y si usas Visual Studio seguro que estás utilizando también IISExpress.

IISExpress es la versión independiente, aislada del sistema operativo, de Internet Information Services, el servidor de aplicaciones de Microsoft. Es exactamente igual a su hermano mayor, pero pensado para desarrollo de aplicaciones. Aunque viene con Visual Studio, también puedes descargarlo de manera independiente del enlace anterior y utilizarlo en cualquier equipo. Por ejemplo, yo lo utilizo con VS Code para un montón de cosas, en equipos en los que no tengo Visual Studio.

Las limitaciones de IISExpress respecto a la versión que viene con Windows Server son fundamentalmente dos:

  • No tiene herramientas visuales de administración (pero se puede gestionar a mano)
  • Sólo permite servir páginas localmente, a la maquina en la que desarrollas.

Por lo demás son idénticos, así que lo que pruebes con IISExpress es como si lo probases en un servidor de verdad.

La segunda limitación, no obstante, hay veces en las que es un poco limitante. Por ejemplo, si necesitas que otras personas no técnicas de tu entorno puedan probar con calma lo que estás desarrollando, lo ideal sería darles la dirección IP de tu equipo y decirles que se conecten con el navegador al puerto de tu aplicación para que pudieran usar la aplicación. Lo que ocurre es que no funcionará debido a esa limitación de sólo servir en localhost.

Ya expliqué en su día cómo podía exponer hacia el exterior de tu red cualquier servicio HTTP usando la estupenda herramienta ngrok. Pero no deja de ser una herramienta externa para la que hay que darse de alta, que hay que configurar mínimamente, cambia la dirección cada vez que la usas (en su versión gratuita), etc... Y si sólo quieres compartir en tu red local es un poco "matar moscas a cañonazos".

iisexpress-proxy

Existe una utilidad estupenda en el repositorio de paquetes de npm llamada iisexpress-proxy que sirve precisamente para lo que estamos buscando: intermedia entre el exterior de tu equipo y IISExpress para devolver todas las peticiones a quien las necesite, que es justo lo que queremos.

Lo único que necesitamos para ponerlo a andar es tener instalado Node.js en nuestro equipo. Hoy en día raro es el desarrollador web que no tiene Node.js instalado porque, aunque no desarrolles para esa plataforma, prácticamente todo el tooling moderno para desarrollo web está basado en él. De todos modos, si no lo tienes, sólo debes ir a su página y descargar cualquiera de las dos versiones (la LTS de soporte a largo plazo, o la más reciente) y listo.

Vale, pues una vez que tienes Node.js instalado, para ejecutarla solo tienes que hacer:

npx iisexpress-proxy puertolocal puertoexterno

Lo que hace esto es descargar  iisexpress-proxy (la primera vez) y exponer el puerto en el que está tu aplicación IISExpress hacia el exterior usando el otro puerto que le indiques.

Cuando lanzas IISExpress por primera vez en un proyecto se le asigna automáticamente un puerto aleatorio y éste se conserva a partir de ese momento. El puerto es lo que tienes depués de los dos puntos en la barra de direcciones cuando trabajas con la aplicación. Vamos a suponer que es, por ejemplo, el 7643 (verías http://localhost:7643 en el navegador).

Pues si escribes:

npx iisexpress-proxy 7643 5555

estarás haciendo que el proxy salga al exterior por el puerto 5555 (puedes poner más o menos el que quieras, con cuidado de no repetir uno que esté en uso, claro).

Ahora, la gente de tu red local que quieras que se conecte a tu aplicación sólo debe escribir en su navegador tu dirección IP seguida de : y ese puerto, así por ejemplo:

http://192.168.1.100:5555/

y tendrán acceso a tu aplicación en desarrollo siempre y cuando mantengas IISExpress y el proxy funcionando, claro.

También es importante que, si tienes el cortafuegos de Windows acivado, que abras el puerto 5555 o el que hayas elegido para permitir conexiones desde el exterior, obviamente. 

¡Listo!

Aunque lo anterior es muy práctico porque lanza la herramienta cada vez que la necesites y sólo se la descarga entera la primera vez (npm hace una caché local de los paquetes y sólo los actualiza si hay una nueva versión), también puedes instalar la herramienta globalmente para poder lanzarla cuando quieras, incluso sin conexión a Internet (pero sí a la red local), usando el comando:

npm i -g iisexpress-proxy

Así para ejecutarlo a partir de ese momento puedes obviar el comando npx:

iisexpress-proxy puertolocal puertoexterno

Y si crees que tus compañeros de equipo lo van a utilizar también, puedes meterlo como una dependencia del proyecto, en vez de global, de modo que todos lo tengan y puedan lanzarlo desde la carpeta del proyecto en lugar de desde cualquier sitio, cambiando ligeramente el comando:

npm i -D iisexpress-proxy

que debes ejecutar dentro de la carpeta de tu proyecto en la que ya debe existir el archivo package.json (si no lo tienes créalo con npm init -y).

Así tienes las tres opciones: ejecutar bajo demanda, ejecutar globalmente y ejecutar en un proyecto concreto para compartir la configuración con tus compañeros.

¡Espero que te sea útil!

 

💪🏻 ¿Este post te ha ayudado?, ¿has aprendido algo nuevo?
Pues NO te pido que me invites a un café... Te pido algo más fácil y mucho mejor

Escrito por un humano, no por una IA