IISExpress renvoie une erreur 503 à partir de machines distantes

183

J'essaie de tester un site Web exécuté dans une instance IISExpress locale avec d'autres machines / appareils sur mon réseau local. J'utilise Win7 Pro.

Lorsque je tente pour la première fois de parcourir ma machine à partir d'une autre machine sur mon segment de réseau local, j'obtiens une erreur 400: Le nom d'hôte n'est pas valide.

Je comprends que je dois accorder un accès à distance à l'ACL avec une commande sur l'invite de commande élevée comme:

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

Maintenant, je reçois une erreur 503 service est indisponible.

Le pare-feu Windows est actuellement désactivé et je peux parcourir mon instance IISExpress locale avec l'adresse http://localhost:50333

Quelle est la dernière pièce de ce puzzle de configuration?

Jeff Fritz
la source
1
Que se passe-t-il si vous naviguez vers http://mymachinename:50333/ depuis votre ordinateur?
Colonel Panic
1
Le problème a été résolu. Voir la réponse acceptée de vikomall
Jeff Fritz
1
Discussion plus approfondie à ce sujet ici: hanselman.com/blog/…
Chris Moschini
3
Vous pouvez installer notre extension VS gratuite 'Conveyor' pour contourner ce problème marketplace.visualstudio.com/...
Jim W dit de réintégrer Monica

Réponses:

270

Il semble qu'il vous manque une entrée d'informations de liaison dans le fichier applicationhost.config.

  1. Ouvrez votre fichier applicationhost.config. Les emplacements possibles sont:

    • %userprofile%\Documents\IISExpress\config\applicationhost.config
    • $(solutionDir)\.vs\config\applicationhost.config (VS2015)
    • À défaut, inspectez la sortie de iisexpress.exepour être sûr.
  2. Localisez votre entrée de site Web et ajoutez liaison suivante avec le nom de votre ordinateur.

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

Vikomall
la source
9
Ça ne fait rien. Visual Studio a créé une entrée de configuration en double pour l'élément. Je l'ai enlevé et cela a fonctionné.
nuzzolilo
3
IIS Express n'utilise pas toujours le fichier de configuration sur ce chemin. Lisez iisexpress.exeattentivement la sortie de pour voir quel fichier de configuration il utilise.
Colonel Panic
5
Point clé 3, redémarrez IIS Express! Localisez l'icône dans votre barre d'état système et arrêtez-la pour la forcer à redémarrer. Je ne sais pas s'il existe une manière plus élégante. Mais cela a fonctionné pour moi. Merci!
The Senator
9
Si vous êtes trop paresseux pour ajouter chaque combinaison nom d'hôte /
adresse IP,
4
Un autre conseil: si vous cliquez avec le bouton droit sur l'icône de la barre d'état système IISExpress, vous pouvez sélectionner "Afficher toutes les applications" qui ouvrira une boîte de dialogue affichant toutes les applications que vous exécutez actuellement localement. Faites un clic droit sur l'application souhaitée (ne faites pas de clic gauche ou cela ouvrira le navigateur), vous verrez alors "Chemin" et "Config" ci-dessous. Cliquez avec le bouton gauche sur "Config" et cela ouvrira le fichier Applicationhost.config associé où vous devez ajouter / modifier les liaisons comme décrit ci-dessus. C'est un moyen simple de localiser la configuration actuelle.
Matt du
31

Il n'y avait qu'une seule chose qui fonctionnait pour moi.

en utilisant *:portnumber:* n'était pas bonne. Oui, après avoir fait cela et m'être assuré que le pare-feu Windows était ouvert, je pouvais me connecter au port, mais j'ai toujours l'erreur «503».

J'ai testé quelques éléments localement et j'ai découvert que seul http: // localhost fonctionnait. L'utilisation de l'adresse IP réelle (pas 127.0.0.1, mais, par exemple, 192.168.1.50), renvoyait toujours un 503 même sur la machine locale. J'ai essayé d'utiliser le vrai nom d'hôte dans les liaisons, mais IIS Express a refusé de démarrer. Cela peut en fait avoir quelque chose à voir avec la façon dont le nom d'hôte a été résolu. Je n'ai pas exploré cela davantage.

Enfin, j'ai fini par utiliser cette configuration:

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

De cette façon, j'ai pu me connecter à partir d'une machine distante en utilisant http://192.168.1.50:53351.

Le lézard
la source
J'ai frappé cette erreur exacte, mais je ne voulais pas coder en dur l'adresse IP actuelle dans la configuration, car elle peut changer. J'ai trouvé que le joker fonctionne sur les parties IP et nom d'hôte, alors j'ai fini avec: <binding protocol="https" bindingInformation="*:44300:*" /> <binding protocol="http" bindingInformation="*:8888:*" /> edit: vraiment essayé de comprendre SO markdown, j'ai quitté :).
Brian Barker
19

Après avoir perdu plus de 3h sur un sujet aussi complet, j'ai décidé de partager ma configuration avec vous. Ma configuration est Visual Express 2012 pour la mise à jour Web 4 sur Windows 8. C'était mon premier retour sur MS VS depuis des études (au moins 8 ans) et maintenant je suis sûr que Linux est régi. Sur django, ce type de configuration m'a pris 10 minutes de recherche de documentation.

  1. désactiver le pare-feu pour les tests

    netsh advfirewall set allprofiles state off
    
  2. les liaisons de configuration dans mon cas, l'adresse locale est localIP = 192.168.1.102 (car les liens ne peuvent pas contenir de domaine non numérique, utilisez-le ci-dessous au lieu de mylocaldomain.com, voir la politique de stackoverflow) dans Documents\IISExpress\config\applicationhost.config

    <bindings>
        <binding protocol="http" bindingInformation="*:53351:mylocaldomain.com" />
        <binding protocol="http" bindingInformation="*:53351:localhost" />
    </bindings>
    
  3. ajouter automatiquement le service de démarrage automatique pour ISS Express

    <site name="NeuronCharts" id="2" serverAutoStart="true">
    
  4. Ajoutez des règles étranges au serveur http (je ne sais toujours pas si c'est bon)

    netsh http add urlacl url=http://mylocaldomain.com:53351/ user=everyone
    
  5. exécuter IISExpress manuellement pas depuis VS IDE

  6. vous verrez que ISSExpress enregistre les liaisons
  7. exécuter le navigateur http://mylocaldomain.com:53351 s'il fonctionne, nous pouvons ajouter une règle de pare-feu
  8. ajouter une règle de pare-feu

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

définissez remoteip sur any si vous souhaitez accéder à votre serveur depuis le monde extérieur si vous souhaitez accéder au réseau local utilisez localsubnet

  1. démarrer le pare-feu

    netsh advfirewall set allprofiles state on
    
  2. vérifiez à nouveau si tout fonctionne sur IP locale et publique

Je te souhaite bonne chance

Rafal

Rafal
la source
3
Cela a empêché IIS Express de s'exécuter sur Win8 avec VS2013 sans exécuter VS2013 en tant qu'administrateur. Cela est dû au fait qu'IIS Express tente maintenant de s'ouvrir au trafic externe à la suite de la commande netsh. Je n'ai jamais pu non plus en faire profiter ce trafic; J'obtiendrais un 503. Pour inverser le problème causé par la commande netsh dans cette réponse, exécutez ceci à partir d'une invite de commande exécutée en tant qu'administrateur: netsh http delete urlacl url=http://*:55416/(remplacez le port par votre port)
Chris Moschini
fwiw - Je n'ai pas besoin de l'étape 4 (l'appel netsh que @Rafal n'est pas sûr est nécessaire) et, bien que je n'ai pas besoin de la liaison "localhost" à l'étape 2 pour exécuter les projets VS2013 dans ma solution, le front end se charge beaucoup plus rapidement lorsque cette liaison "localhost" est laissée en place.
lukkea
J'ai trouvé que suivre les instructions ci-dessus entraînait toujours l'utilisation de 503 localhost. Je trouve que le nom de la machine invité (Windows) nécessaire pour être dans les liaisons dans applicationhost.configet sur l'hôte (Mac) le nom de la machine invité nécessaire pour être mis en correspondance 127.0.0.1dans /etc/hosts. Ce n'est qu'alors qu'une demande adressée à la machine invitée sur l'hôte a réussi.
Matt
Un ajout à l'étape 5. Utilisez iisexpress.exe / siteid: id où id est la valeur de l'attribut id de votre site dans le paramètre <site id = "id">, sinon il démarrera le 1er site.
Mudit Jain
9

J'ai trouvé que le problème était lié à un mauvais mappage d'URL. Pour comprendre ceci:

netsh http show urlacl 

et recherchez des choses comme http://+:80/ ou le port auquel vous vous engagez.

Ensuite, utilisez

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

Cela a résolu le problème pour moi.

Anthony Rizzolo
la source
4
devrait être netsh http supprimer urlacl url = <l'url de la liste>, cela a fonctionné pour moi merci!
sergiogx
1
Ceci est discuté plus en détail sur le blog msdn . C'était aussi mon problème.
Kevin Scharnhorst le
3
Merci, la syntaxe exacte estnetsh http delete urlacl <yoururl>
yoel halb
7

Rien n'a fonctionné pour moi. Enfin j'ai trouvé iisexpress-proxy

Voir ma réponse https://stackoverflow.com/a/33623399/631527

Une autre solution est ngrok

Boîte à outils
la source
Incroyable! J'ai essayé toutes ces autres solutions et elles n'ont pas fonctionné non plus. "Mauvaise demande" ou "Service indisponible". Trop compliqué. J'ai installé le module de nœud et l'ai exécuté, cela fonctionne instantanément !!
TetraDev
TRAVAUX! saint! Je vous remercie!
Ayson Baxter
consultez ngrok aussi
Toolkit
1
Cela fonctionne SIMPLEMENT comme un charme avec ngrok! Il est étrange de devoir d'abord acheminer de localhost vers iis-proxy, puis de proxy vers ngrok, mais bon, a fonctionné !. Par exemple, j'ai mon iisexpress sur le port 3028. J'ai couru iisexpress-proxy 3028 to 12345et puis ./ngrok.exe http 12345. 😅
Reuel Ribeiro
@TetraDev, la "demande incorrecte" ou le "service non disponible" était dû au fait que l'en-tête d'hôte reçu lors de l'accès à localhost depuis ngrok n'était pas un localhost comme expliqué ici
Dani Torres
3

Ce qui m'a aidé, c'est un clic droit sur l'icône «IISExpress», «Afficher toutes les applications». Ensuite, en sélectionnant le site Web et j'ai vu quel aplicationhost.config il utilise, et la correction s'est parfaitement déroulée.

Configuration IISExpress

Emmanuel
la source
1

Le problème est de mettre à jour le fichier applicationhost.config dans le dossier Web au lieu de celui de la solution. Le fichier de configuration de la solution est celui à modifier

Victor Arce
la source
1

Après la solution de @vikomall, n'oubliez pas de démarrer VS en tant qu'administrateur. Cela corrige ça pour moi.

Rapido
la source
0

Concernant la réponse d'Anthony Rizzolo: sous Windows 8.1, je devais taper comme ceci:

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

Par exemple:

netsh http delete urlacl url=http://+:8689/
Elrinthe
la source
0

Aucune des réponses ci-dessus n'a fonctionné pour moi.

J'ai eu deux entrées dans netsh pour le même service

netsh http show urlacl

entrez la description de l'image ici

L'un utilisant un joker fort, l'autre utilisant un joker faible.

La suppression de celui avec le caractère générique faible a fait le travail.

En savoir plus sur le joker fort et faible dans le contexte de netsh

Lorsque l'élément hôte d'un UrlPrefix se compose d'un seul signe plus (+), le UrlPrefix correspond à tous les noms d'hôte possibles dans le contexte de ses éléments de schéma, de port et relativeURI, et tombe dans la catégorie des caractères génériques forts.

Lorsqu'un astérisque (*) apparaît comme élément hôte, alors UrlPrefix tombe dans la catégorie des caractères génériques faibles. Ce type d'UrlPrefix correspond à tout nom d'hôte associé au schéma, au port et à l'URI relative spécifiés qui n'a pas encore été mis en correspondance par un UrlPrefix de caractère générique faible, explicite ou lié à l'adresse IP. Cette spécification d'hôte peut être utilisée comme fourre-tout par défaut dans certaines circonstances, ou peut être utilisée pour spécifier une grande section d'espace de noms d'URL sans avoir à utiliser de nombreux UrlPrefixes.

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

matcheek
la source