IISExpress devuelve un error 503 de máquinas remotas

183

Estoy intentando probar un sitio web que tengo en una instancia local de IISExpress con algunas otras máquinas / dispositivos en mi red local. Estoy ejecutando Win7 Pro.

Cuando intento buscar mi máquina desde otra máquina en mi segmento de red local, aparece un error 400: el nombre de host no es válido.

Entiendo que necesito otorgar acceso remoto a la ACL con un comando en el símbolo del sistema elevado como:

netsh http add urlacl url=http://mymachinename:50333/ user=everyone

Ahora recibo un servicio 503 no está disponible error.

El Firewall de Windows está apagado actualmente y puedo buscar mi instancia local de IISExpress con la dirección http://localhost:50333

¿Cuál es la pieza final de este rompecabezas de configuración?

Jeff Fritz
fuente
1
¿Qué sucede si navegas http://mymachinename:50333/ desde tu computadora?
Coronel Panic
1
El problema ha sido resuelto. Ver la respuesta aceptada de vikomall
Jeff Fritz
1
Una discusión más profunda de esto aquí: hanselman.com/blog/…
Chris Moschini
3
Puede instalar nuestra extensión VS gratuita 'Conveyor' para solucionar este problema marketplace.visualstudio.com/…
Jim W dice que reinstale a Monica el

Respuestas:

270

Parece que le falta una entrada de información vinculante en el archivo applicationhost.config.

  1. Abra su archivo applicationhost.config. Las posibles ubicaciones son:

    • %userprofile%\Documents\IISExpress\config\applicationhost.config
    • $(solutionDir)\.vs\config\applicationhost.config (VS2015)
    • De lo contrario, inspeccione la salida de iisexpress.exepara estar seguro.
  2. Localice su entrada en el sitio web y agregue el siguiente enlace con el nombre de su máquina.

         <binding protocol="http" bindingInformation=":50333:your-machine-name" />
    
  3. Reiniciar IIS Express

vikomall
fuente
9
No importa. Visual Studio creó una entrada de configuración duplicada para el elemento. Lo quité y funcionó.
nuzzolilo
3
IIS Express no siempre usa el archivo de configuración en esa ruta. Lea el resultado iisexpress.execuidadosamente para ver qué archivo de configuración está utilizando.
Coronel Panic
55
Punto clave elemento 3, reinicie IIS Express! Localice el icono en la bandeja del sistema y deténgalo para forzarlo a reiniciarse. No estoy seguro si hay una manera más elegante. Pero esto funcionó para mí. ¡Gracias!
El senador
9
Si es demasiado vago para agregar cada combinación de nombre de host / dirección de IP, use un * en lugar de "su-nombre-máquina"
StarQuake
44
Una sugerencia más: si hace clic con el botón derecho en el icono de la bandeja del sistema de IISExpress, puede seleccionar "Mostrar todas las aplicaciones", que abrirá un cuadro de diálogo que muestra todas las aplicaciones que está ejecutando actualmente localmente. Haga clic derecho en la aplicación deseada (no haga clic izquierdo o se abrirá el navegador), luego verá "Ruta" y "Configuración" a continuación. Haga clic izquierdo en "Config" y se abrirá el archivo Applicationhost.config relacionado donde necesita agregar / editar los enlaces como se describe anteriormente. Esa es una manera fácil de localizar la configuración actual.
Matt
31

Solo había 1 cosa que funcionó para mí.

usar *:portnumber:*no era bueno. Sí, después de hacer eso y asegurarme de que el Firewall de Windows estaba abierto, pude conectarme al puerto, pero aún recibí el error "503".

Probé algunas cosas localmente y descubrí que solo http: // localhost funcionaba. Usando la dirección IP real (no 127.0.0.1, pero, por ejemplo, 192.168.1.50), todavía devolvió un 503 incluso en la máquina local. Intenté usar el nombre de host real en los enlaces, pero IIS Express se negó a comenzar. Esto puede tener algo que ver con cómo se resolvió el nombre de host. No exploré eso más a fondo.

Finalmente, terminé usando esta configuración:

<binding protocol="http" bindingInformation="*:53351:localhost" />
<binding protocol="http" bindingInformation="192.168.1.50:53351:*" />

De esa manera, pude conectarme desde una máquina remota usando http://192.168.1.50:53351.

El lagarto
fuente
Llegué a este error exacto, pero no quería codificar la IP actual en la configuración, ya que puede cambiar. Encontré que el comodín funciona en las partes de IP y nombre de host, así que terminé con: <binding protocol="https" bindingInformation="*:44300:*" /> <binding protocol="http" bindingInformation="*:8888:*" /> edit: realmente traté de entender la rebaja SO, dejé :).
Brian Barker
19

Después de perder más de 3 horas en un tema tan completo, decidí compartir mi configuración con usted. Mi configuración es Visual Express 2012 para la actualización web 4 en Windows 8. Esta fue la primera vez que volví a MS VS desde los estudios (al menos 8 años) y ahora estoy seguro de que Linux gobierna. En django, este tipo de configuración me llevó 10 minutos de búsqueda de documentación.

  1. apague el firewall para probar

    netsh advfirewall set allprofiles state off
    
  2. configurar enlaces en mi caso la dirección local es localIP = 192.168.1.102 (debido a que los enlaces no pueden contener un dominio no numérico, úselo a continuación en lugar de mylocaldomain.com, consulte la política de stackoverflow) en Documents\IISExpress\config\applicationhost.config

    <bindings>
        <binding protocol="http" bindingInformation="*:53351:mylocaldomain.com" />
        <binding protocol="http" bindingInformation="*:53351:localhost" />
    </bindings>
    
  3. agregue la ejecución automática para el servicio de inicio ISS Express automáticamente

    <site name="NeuronCharts" id="2" serverAutoStart="true">
    
  4. Agregue algunas reglas extrañas al servidor http (todavía no sé si esto es necesario)

    netsh http add urlacl url=http://mylocaldomain.com:53351/ user=everyone
    
  5. ejecutar IISExpress manualmente no desde VS IDE

  6. verá que ISSExpress está registrando enlaces
  7. ejecutar el navegador http://mylocaldomain.com:53351 si está funcionando, entonces podemos agregar la regla de firewall
  8. agregar regla de firewall

    netsh advfirewall firewall add rule name="IISExpressWeb" dir=in protocol=tcp localport=53351 remoteip=any action=allow
    

establezca remoteip en cualquiera si desea acceder a su servidor desde fuera del mundo si desea acceder a la red local, use localsubnet

  1. iniciar firewall

    netsh advfirewall set allprofiles state on
    
  2. compruebe nuevamente si todo funciona en ip local y pública

Te deseo suerte

Rafal

Rafal
fuente
3
Esto provocó que IIS Express ya no se ejecute en Win8 con VS2013 sin ejecutar VS2013 como Administrador. Es causado por IIS Express que ahora intenta abrirse al tráfico externo como resultado del comando netsh. Tampoco pude conseguir que sirviera ese tráfico; Obtendría un 503. Para revertir el problema causado por el comando netsh en esta respuesta, ejecute esto desde un Símbolo del sistema que se ejecuta como Administrador: netsh http delete urlacl url=http://*:55416/(reemplace el puerto con su puerto)
Chris Moschini
fwiw: no necesito el paso 4 (la llamada netsh que @Rafal no está segura es necesaria) y, aunque no necesito el enlace "localhost" en el paso 2 para ejecutar los proyectos VS2013 en mi solución, el frente El final se carga significativamente más rápido cuando el enlace "localhost" se deja en su lugar.
lukkea
Descubrí que seguir las instrucciones anteriores todavía resultó en 503 usando localhost. He descubierto que el nombre del equipo invitado (Windows) que se necesita para estar en los enlaces en applicationhost.config, y en el host (Mac) en el nombre del equipo invitado necesaria para ser asignada a 127.0.0.1en /etc/hosts. Solo entonces tuvo éxito una solicitud a la máquina invitada en el host.
Matt
Una adición al paso 5. Use iisexpress.exe / siteid: id, donde id es el valor del atributo id de su sitio en la configuración <site id = "id">, de lo contrario, se iniciará el primer sitio.
Mudit Jain
9

Encontré que el problema tenía que ver con un mal mapeo de urlacl. Para resolver esto:

netsh http show urlacl 

y busque cosas como http://+:80/o el puerto al que está vinculado.

Luego usa

netsh http delete url=<the url from the list>

Esto solucionó el problema para mí.

Anthony Rizzolo
fuente
44
debe ser netsh http delete urlacl url = <la url de la lista>, esto funcionó para mí, gracias!
sergiogx
1
Esto se discute con más detalle en el blog msdn . Este fue finalmente mi problema también.
Kevin Scharnhorst
3
Gracias, la sintaxis exacta esnetsh http delete urlacl <yoururl>
yoel halb
7

Nada me funcionó. Finalmente encontré iisexpress-proxy

Ver mi respuesta https://stackoverflow.com/a/33623399/631527

Otra solución es ngrok

Kit de herramientas
fuente
¡Asombroso! Probé todas esas otras soluciones y tampoco funcionaron. "Solicitud incorrecta" o "Servicio no disponible". Demasiado complicado. Instalé el módulo de nodo y lo ejecuté, ¡funciona instantáneamente!
TetraDev
¡TRABAJOS! ¡santo! ¡Gracias!
Ayson Baxter
echa un vistazo a ngrok también
Toolkit
1
¡SIMPLEMENTE funciona como un encanto con ngrok! Es extraño tener que enrutar primero de localhost a iis-proxy y luego de proxy a ngrok, pero bueno, ¡funcionó! Por ejemplo, tengo mi iisexpress en el puerto 3028. Corrí iisexpress-proxy 3028 to 12345y luego ./ngrok.exe http 12345. 😅
Reuel Ribeiro
@TetraDev, la "Solicitud incorrecta" o "Servicio no disponible" se debió a que el encabezado del host recibido al acceder a localhost desde ngrok no era localhost como se explica aquí
Dani Torres
3

Lo que me ayudó fue hacer clic derecho en el ícono 'IISExpress', 'Mostrar todas las aplicaciones'. Luego seleccioné el sitio web y vi qué aplicationhost.config usa, y la corrección fue perfecta.

Configuración IISExpress

Emmanuel
fuente
1

El problema es actualizar el archivo applicationhost.config dentro de la carpeta web en lugar de la solución. El archivo de configuración de la solución es el que se debe cambiar.

Victor Arce
fuente
1

Después de la solución de @vikomall, no olvide iniciar VS como administrador. Esto me lo arregla.

Rapido
fuente
0

Con respecto a la respuesta de Anthony Rizzolo: en Windows 8.1, tuve que escribir así:

netsh http delete urlacl url=<the url from the list>

Por ejemplo:

netsh http delete urlacl url=http://+:8689/
Elrinth
fuente
0

Ninguna de las respuestas anteriores funcionó para mí.

He tenido dos entradas en netsh para el mismo servicio.

netsh http show urlacl

ingrese la descripción de la imagen aquí

Uno con un comodín fuerte, el otro con un comodín débil.

Eliminar el que tiene el comodín débil hizo el trabajo.

Más sobre el comodín fuerte y débil en el contexto de netsh

Cuando el elemento host de un UrlPrefix consta de un único signo más (+), el UrlPrefix coincide con todos los nombres de host posibles en el contexto de su esquema, puerto y elementos relativoURI, y cae en la categoría comodín fuerte.

Cuando aparece un asterisco (*) como elemento host, UrlPrefix cae en la categoría de comodín débil. Este tipo de UrlPrefix coincide con cualquier nombre de host asociado con el esquema especificado, el puerto y el relativo URL que aún no ha sido igualado por un UrlPrefix de comodín fuerte, explícito o con comodín débil vinculado a IP. Esta especificación de host se puede usar como un conjunto predeterminado en algunas circunstancias, o se puede usar para especificar una gran sección del espacio de nombres de URL sin tener que usar muchos UrlPrefixes.

https://docs.microsoft.com/en-gb/windows/desktop/Http/urlprefix-strings

Matcheek
fuente