web-dev-qa-db-fra.com

IISExpress renvoie une erreur 503 des ordinateurs distants

J'essaie de tester un site Web en cours d'exécution dans une instance IISExpress locale avec d'autres machines/périphériques de mon réseau local. Je cours Win7 Pro.

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

Je comprends que j’ai besoin d’accorder un accès à distance à la liste de contrôle d’accès à l’aide d’une commande sur la commande élevée, telle que:

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

Maintenant, je reçois une erreur de service 503 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?

177
Jeff Fritz

Il semble qu'il manque une information 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)
    • Sinon, inspectez le résultat de iisexpress.exe Pour en être sûr.
  2. Localisez votre entrée WebSite et add suite à la liaison avec votre nom d'ordinateur.

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

262
vikomall

Il n'y avait qu'une seule chose qui a fonctionné pour moi.

en utilisant *:portnumber:* n'était pas bon. 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'avais toujours l'erreur "503".

J'ai testé quelques objets localement et découvert que seul http: // localhost fonctionnait. L'utilisation de l'adresse IP réelle (non pas 127.0.0.1, mais par exemple 192.168.1.50), a quand même renvoyé 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 un lien avec la résolution du nom d'hôte. Je n'ai pas exploré davantage cette tâche. .

Finalement, 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, je pouvais me connecter depuis une machine distante en utilisant http://192.168.1.50:53351.

29
The Lizard

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 je suis maintenant sûr que les règles de Linux sont respectées. 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 d'installation 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 un autorun pour ISS Express démarrer le service automatiquement

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

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

  6. vous verrez que ISSExpress enregistre des liaisons
  7. lancer le navigateur http://mylocaldomain.com:53351 si cela 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 un monde extérieur si vous souhaitez accéder à un 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 l'ip local et public

Je te souhaite bonne chance

Rafal

18
Rafal

J'ai trouvé que le problème avait à voir avec une mauvaise cartographie urlacl. Pour comprendre ceci:

netsh http show urlacl 

et chercher des choses comme http://+:80/ ou le port auquel vous êtes lié.

Puis utiliser

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

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

6
Anthony Rizzolo

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

5
Toolkit

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, j'ai vu le fichier aplicationhost.config utilisé et la correction s'est parfaitement déroulée.

IISExpress configuration

3
Emmanuel

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

1
Victor Arce

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

enter image description here

L'un utilisant un caractère générique fort, l'autre utilisant un caractère générique faible.

Enlever celui avec le joker faible a fait le travail.

En savoir plus sur le caractère générique fort et faible dans le contexte de netsh

Lorsque l'élément hôte d'un préfixe Url consiste en un seul signe plus (+), ce préfixe correspond à tous les noms d'hôte possibles dans le contexte de ses éléments schéma, port et URL relative, et entre dans la catégorie des caractères génériques forts.

Lorsqu'un astérisque (*) apparaît en tant qu'élément hôte, le préfixe Url appartient à la catégorie de caractère générique faible. Ce type de préfixe UrlPrefix correspond à tout nom d'hôte associé au schéma, au port et à l'URA relative spécifiés, qui n'ont pas encore été mis en correspondance avec un préfixe générique de caractère générique fort, explicite ou lié à une adresse IP. Cette spécification d'hôte peut être utilisée comme une règle générale par défaut dans certaines circonstances, ou peut être utilisée pour spécifier une grande section d'espace de nom d'URL sans avoir à utiliser de nombreux préfixes d'Url.

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

0
matcheek

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

0
Rapido

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/
0
Elrinth