326 votes

Utilisation de domaines personnalisés avec IIS Express

Traditionnellement, j'utilise des domaines personnalisés avec mon serveur de développement localhost. Quelque chose du genre :

dev.example.com
dev.api.example.com

Cela m'a apporté une grande flexibilité lorsque je travaille avec des API externes telles que Facebook. Cela a très bien fonctionné dans le passé avec le serveur de développement Visual Studio intégré, car il suffisait d'ajouter un CNAME à ces enregistrements DNS pointant sur 127.0.0.1 .

Cependant, je n'ai pas réussi à le faire fonctionner avec IIS Express. Tout ce que j'ai essayé semble avoir échoué. J'ai même ajouté la configuration XML correcte au fichier applicationHost.config pour IIS Express, mais il ne semble pas reconnaître les entrées comme valides comme le ferait une véritable installation d'IIS.

<binding protocol="http" bindingInformation="*:1288:dev.example.com" />

Chaque fois que j'entre dans cette ligne et que j'essaie de demander http://dev.example.com:1288 Je reçois le message suivant :

Mauvaise requête - Nom d'hôte non valide

Quelqu'un sait-il si je rate quelque chose d'évident ? Ou l'équipe d'IIS Express a-t-elle vraiment manqué de prévoyance pour voir ce type d'utilisation ?

0 votes

Assurez-vous que l'attribut applicationPool du nœud d'application est défini sur "Clr2IntegratedAppPool" ou "Clr4IntegratedAppPool". J'ai obtenu l'erreur "Bad Hostname" que vous rencontrez lorsque j'utilise "Clr2ClassicAppPool" ou "Clr4ClassicAppPool".

0 votes

Confusion - Les enregistrements CNAME n'acceptent pas les adresses IP mais d'autres noms d'hôtes. Voulez-vous dire un enregistrement A ?

1 votes

J'ai eu beaucoup de problèmes avec cela et j'ai trouvé beaucoup plus facile d'utiliser IIS au lieu de IIS Express.

387voto

David Murdoch Points 28521

Voici ce qui a fonctionné pour moi (Mise à jour pour VS 2013, voir l'historique des révisions pour 2010, pour VS 2015 voir ça : https://stackoverflow.com/a/32744234/218971 ) :

  1. Cliquez à droite sur votre projet d'application Web Properties Web puis configurer le Servers comme suit :

    • Sélectionnez IIS Express dans le menu déroulant
    • Url du projet : http://localhost
    • Remplacer l'URL racine de l'application : http://dev.example.com
    • Cliquez sur Create Virtual Directory (si vous obtenez une erreur ici, vous devrez peut-être désactiver IIS 5/6/7/8, modifier les paramètres d'accès à l'information de IIS, ou modifier les paramètres d'accès à l'information de IIS. Default Site à tout sauf au port :80 assurez-vous que Skype n'utilise pas le port 80 etc.)
  2. En option : Définissez le Start URL a http://dev.example.com

  3. Abrir %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config (Windows XP, Vista et 7) et modifiez la définition du site dans l'interface utilisateur. <sites> Le bloc de configuration doit ressembler à ce qui suit :

    <site name="DevExample" id="997005936">
        <application path="/" applicationPool="Clr2IntegratedAppPool">
            <virtualDirectory
                path="/"
                physicalPath="C:\path\to\application\root" />
        </application>
        <bindings>
            <binding
                protocol="http"
                bindingInformation=":80:dev.example.com" />
        </bindings>
        <applicationDefaults applicationPool="Clr2IntegratedAppPool" />
    </site>
  4. Si vous utilisez MVC : assurez-vous que le applicationPool est défini comme l'une des options "Integrated" (comme "Clr2IntegratedAppPool").

  5. Ouvrez votre hosts fichier et ajoutez la ligne 127.0.0.1 dev.example.com .

  6. Start votre candidature !

De très bons conseils dans les commentaires :

  • Vous devrez peut-être exécuter Visual Studio en tant qu'administrateur.
  • Si vous voulez que les autres développeurs voient votre exécution IIS netsh http add urlacl url=http://dev.example.com:80/ user=everyone
  • Si vous souhaitez que le site soit résolu pour tous les hôtes, définissez les paramètres suivants bindingInformation="*:80:" . Utilisez le port que vous voulez, 80 est juste pratique. Pour résoudre tous les hôtes, vous devrez exécuter Visual Studio en tant qu'administrateur

13 votes

C'est exactement ce que j'ai fait, j'étais sur le point d'écrire ceci, mais vous m'avez devancé :-) En passant, si vous voulez laisser d'autres développeurs voir votre IIS, vous pouvez faire quelque chose comme "netsh http add urlacl url=". dev.example.com:80 user=everyone"

0 votes

@EBarr, avez-vous des problèmes après avoir redémarré votre ordinateur ? Visual Studio 2010 semble oublier cette liaison d'application dans applicationhost.config et exige qu'il en ajoute une nouvelle avant d'ouvrir le projet.

0 votes

Je viens de redémarrer et je n'ai aucun problème. Les fixations sont restées. C'est un peu hasardeux, car le paramètre devrait être grisé, mais y a-t-il une chance que le paramètre "auto-assign Port" soit défini sous "Use Visual Studio Development Server" ? Je viens de comparer mon fichier projet dans TFS et je me suis souvenu que j'avais désactivé les ports automatiques avant ce changement.

46voto

dmatson Points 1435

Lorsque vous utilisez Visual Studio 2012 avec IIS Express, en changeant une liaison existante ne fonctionne pas de manière permanente. (Elle peut fonctionner jusqu'à ce que vous fermiez VS, mais après cela, les choses se gâtent vraiment).

La clé est de garder la liaison existante localhost et en ajoutant une nouvelle liaison après celle-ci.

À moins que vous ne travailliez en tant qu'administrateur, vous devrez également exécuter netsh add urlacl (pour vous donner les autorisations de faire fonctionner un site non-localhost en tant qu'utilisateur standard).

Si vous voulez autoriser n'importe quel nom d'hôte, le processus complet est le suivant :

  1. Créez votre application Web et découvrez le port qu'elle utilise (voir les propriétés du projet, onglet Web, Url du projet).
  2. À partir d'une invite administrateur, exécutez les commandes suivantes (en remplaçant numéro de port avec le numéro de port que vous avez déterminé au point 1) :

    netsh http add urlacl url="http://*:portnumber/" user=everyone
    netsh http add urlacl url="http://localhost:portnumber/" user=everyone

Vous pouvez également utiliser votre nom d'utilisateur (DOMAIN \USER ) au lieu de tout le monde pour une meilleure sécurité.

  1. Ouvrez applicationhost.config (généralement sous Mes Documents \IIS Express \config ), et trouvez l'élément avec votre numéro de port.
  2. Ajoutez une autre liaison avec le nom d'hôte que vous voulez (dans ce cas, *). Par exemple :

    <site name="MvcApplication1" id="2">
        <application path="/" applicationPool="Clr4IntegratedAppPool">
            <virtualDirectory path="/" physicalPath="C:\sites\MvcApplication1" />
        </application>
        <bindings>
            <binding protocol="http" bindingInformation="*:12853:localhost" />
            <binding protocol="http" bindingInformation="*:12853:*" />
        </bindings>
    </site>

Notez que, si vous souhaitez ouvrir tous les noms d'hôtes (*), vous aurez besoin de deux commandes netsh (une pour * et une pour localhost). Si vous souhaitez uniquement ouvrir un nom d'hôte spécifique, vous n'avez pas strictement besoin de la deuxième commande netsh (localhost) ; celle contenant votre nom d'hôte spécifique est suffisante.

1 votes

J'ai fait la même chose (1ère approche), en naviguant sur mycustomhost:myportnr J'obtiens "Service indisponible". VS2012. Je ne peux pas essayer le 2ème car il n'y a pas de IIS Express sous "Mes documents" et applicationhost.config que j'ai trouvé dans c : \Program fichiers \IIS Express n'avait pas de configuration pour mon application web...

2 votes

Avec VS2013, je constate que cette configuration ne fonctionne que si je l'exécute ensuite en tant qu'administrateur ! (En fonctionnant en tant que non-administrateur, IIS Express semble ignorer la deuxième liaison - si j'ouvre son interface utilisateur à partir de l'icône de notification, IIS indique que mon site est en cours d'exécution, mais ne montre que la première liaison, et je ne peux utiliser que les éléments suivants localhost ... Si je suis exécuté en tant qu'administrateur, il affiche les deux liaisons dans l'interface utilisateur et les deux fonctionnent). J'ai ajouté les urlacls avec netsh, mais cela ne semble faire aucune différence - IIS Express ne semble même pas essayer de lier autre chose que localhost s'il n'est pas élevé.

0 votes

L'ajout d'un enregistrement avec l'option * a résolu le problème du "Service indisponible" pour moi.

24voto

Jaro Dunajsky Points 1427

Le nom d'hôte invalide indique que le site réel que vous avez configuré dans le fichier de configuration de IIS Express n'est (très probablement) pas en cours d'exécution. IIS Express n'a pas de modèle de processus comme IIS.


Pour que votre site fonctionne, il doit être démarré explicitement (soit en ouvrant et en accédant à partir de webmatrix, soit en appelant iisexpress.exe en ligne de commande (à partir du répertoire d'installation) avec le paramètre /site.


En général, les étapes pour permettre aux noms DNS entièrement qualifiés d'être utilisés pour l'accès local sont les suivantes Reprenons votre exemple du nom DNS dev.exemple.com

  1. modifier %Windows \system32\drivers\etc\hosts pour mapper dev.example.com à 127.0.0.1 (privilège d'administrateur requis). Si vous contrôlez le serveur DNS (comme dans le cas de Nick), l'entrée DNS est suffisante et cette étape n'est pas nécessaire.

  2. Si vous accédez à Internet par le biais d'un proxy, assurez-vous que le site dev.example.com ne sera pas autorisé à accéder au proxy (vous devez le placer dans la liste des exceptions de votre navigateur). Pour IE, il s'agit de Outils/Options Internet/Connexions/Paramètres LAN, puis de Serveur proxy/Avancé et de placer dev.example.com dans la liste des exceptions.

  3. Configurez la liaison IIS Express pour votre site (ex : Site1) pour inclure dev.example.com. Des privilèges administratifs seront nécessaires pour utiliser la liaison. Alternativement, une réservation unique d'URL peut être faite avec http.sys en utilisant

    netsh http add urlacl url=http://dev.example.com:<port>/ user=<user_name>

  4. commencer iisexpress /site:Site1 ou ouvrir Site1 dans WebMatrix

2 votes

Bonjour Jaro, merci pour votre aide, mais 127.0.0.1 est défini dans mon DNS et non dans le fichier hosts afin que tous les développeurs aient le même accès. Ensuite, je ne peux pas le faire démarrer pour déboguer dans VS, à moins que la liaison soit définie comme "*:1234:localhost", ce qui est une configuration totalement inutile, car il est lié à toutes les adresses IP de ma machine, mais n'accepte que les en-têtes d'hôte de "localhost". Pourquoi n'ont-ils pas simplement fait "127.0.0.1:1234 :" pour éviter toutes ces conneries. Les en-têtes d'hôte ne sont pas nécessaires tant que l'IP et le port sont résolus. Et l'exécution en tant qu'administrateur est juste une énorme douleur dans le cul pour une grande équipe. Quel désastre qu'est IIS Express.

1 votes

Aussi, juste à titre de référence Bad Request - Invalid Hostname signifie que le nom d'hôte que j'essaie d'utiliser ne peut pas être résolu parce que l'équipe d'IIS Express, dans son infinie sagesse, a décidé d'indiquer spécifiquement "localhost" comme étant le seul en-tête d'hôte pouvant fonctionner. Et VS ne vous laisse pas l'exécuter autrement que par "*:1234:localhost".

2 votes

Je vous entends sur la question de 127.0.0.1. Le "localhost" dans la liaison est définitivement un problème puisqu'il ne comprend pas le trafic pour 127.0.0.1 . La conception est limitée par le contrat actuel de http.sys (gestionnaire de protocole http) qui ne reconnaît que "localhost" pour l'utilisation non administrative. L'exigence de l'administrateur seulement peut être atténuée par une réservation unique d'URL avec http.sys (je mettrai à jour l'information ci-dessus). Veuillez me faire part de votre utilisation exacte avec Visual Studio (il s'agit de VS2010 avec SP1 Beta ?). Essayons de travailler un peu plus sur ce sujet et (espérons-le) de régler le problème.

19voto

rymo Points 924

Sur mon installation WebMatrix IIS Express, le passage de "*:80:localhost" a "*:80:custom.hostname" n'a pas fonctionné ("mauvais nom d'hôte", même avec un nom d'hôte correct, etc. \hosts ), mais "*:80:" a fait et sans aucune des étapes supplémentaires requises par les autres réponses ici. Notez que "*:80:*" ne le fera pas ; ne tenez pas compte du deuxième astérisque.

3 votes

Uuuum, donc "*:80:*" a fonctionné pour moi, mais j'ai ensuite redémarré mon ordinateur et il n'a soudainement plus fonctionné jusqu'à ce que je le change en "*:80:" et tout allait bien ! Merci.

2 votes

Enfin ! J'ai aussi suivi toutes les étapes ailleurs, et le fait d'enlever le * à la fin l'a fait fonctionner, merci !

0 votes

Juste ici pour dire que ça a marché pour moi. J'ai essayé la réponse acceptée et j'ai inversé toutes les modifications en fonction de ce que vous avez dit et tout fonctionne parfaitement. J'utilise VS2013 Update4.

10voto

Daniel B. Chapman Points 1963

J'essayais d'intégrer l'adresse IP publique dans mon flux de travail et ces réponses ne m'ont pas aidé (j'aime utiliser l'EDI comme l'EDI). Mais les réponses ci-dessus m'ont conduit à la solution (après environ 2 heures à me frapper la tête contre un mur pour que cela s'intègre à Visual Studio 2012 / Windows 8) voici ce qui a fini par fonctionner pour moi.

applicationhost.config généré par VisualStudio sous C:\Users\usr\Documents\IISExpress\config

    <site name="MySite" id="1">
        <application path="/" applicationPool="Clr4IntegratedAppPool">
            <virtualDirectory path="/" physicalPath="C:\Users\usr\Documents\Visual Studio 2012\Projects\MySite" />
        </application>
        <bindings>
            <binding protocol="http" bindingInformation="*:8081:localhost" />
            <binding protocol="http" bindingInformation="*:8082:localhost" />
            <binding protocol="http" bindingInformation="*:8083:192.168.2.102" />
        </bindings>
    </site>
  • Configurer IISExpress pour qu'il fonctionne en tant que Administrator pour qu'il puisse se lier à des adresses extérieures (pas à l'hôte local).
  • Exécuter Visual Stuio en tant que Administrator afin qu'il puisse lancer le processus en tant qu'administrateur permettant la liaison.

Le résultat net est que vous pouvez naviguer vers 192.168.2.102 dans mon cas et de tester (par exemple dans un émulateur Android. J'espère vraiment que cela aidera quelqu'un d'autre, car ce processus a été très irritant pour moi.

Apparemment, il s'agit d'une fonction de sécurité que j'aimerais bien voir désactivée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X