J'utilise généralement des domaines personnalisés avec mon serveur de développement localhost. Quelque chose dans le genre de:
dev.example.com
dev.api.example.com
Cela m'a fourni une tonne de flexibilité lorsque je travaille avec des API externes telles que Facebook. Cela a très bien fonctionné dans le passé avec Visual Studio Development Server, car tout ce que j'avais à faire, c'était d'ajouter un CNAME à ces enregistrements DNS pointant vers 127.0.0.1
.
Cependant, je n'ai pas réussi à faire en sorte que cela fonctionne 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 aussi valides qu'une installation réelle de IIS. aurait.
<binding protocol="http" bindingInformation="*:1288:dev.example.com" />
Chaque fois que j'entre cette ligne et essaie de demander http://dev.example.com:1288
je reçois le message suivant:
Requête incorrecte - Nom d'hôte non valide
Est-ce que quelqu'un sait s'il me manque quelque chose d'évident? Ou l'équipe IIS Express manquait-elle vraiment de prévoyance pour voir ce type d'utilisation?
C'est ce qui a fonctionné pour moi (mis à jour pour VS 2013, voir l'historique des révisions pour 2010, pour VS 2015 voir ceci: https: // stackoverflow.com/a/32744234/218971 ):
Properties
▶ Web
, puis configurez la section Servers
comme suit: http://localhost
http://dev.example.com
Default Site
par IIS par autre chose que le port :80
, assurez-vous que Skype n'utilise pas le port 8 , etc.)Start URL
sur http://dev.example.com
Ouvrez %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config
(Windows XP, Vista et 7) et modifiez la définition du site dans le bloc <sites>
config de manière à respecter les règles suivantes:
<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>
Si vous exécutez MVC: assurez-vous que applicationPool
est défini sur l'une des options "Intégrées" (comme "Clr2IntegratedAppPool").
hosts
) et ajoutez la ligne 127.0.0.1 dev.example.com
.Quelques bons conseils des commentaires:
- Vous devrez peut-être exécuter Visual Studio en tant qu'administrateur.
- Si vous voulez que d'autres développeurs voient votre IIS exécuter
netsh http add urlacl url=http://dev.example.com:80/ user=everyone
- Si vous souhaitez que le site résolve tous les hôtes, définissez
bindingInformation="*:80:"
. Utilisez le port de votre choix, 80 est tout simplement pratique.
Pour Visual Studio 2015 , les étapes dans les réponses ci-dessus s'appliquent, mais le fichier applicationhost.config
se trouve à un nouvel emplacement. Dans votre dossier "solution", suivez le chemin. Cela crée de la confusion si vous effectuez une mise à niveau et si vous avez deux versions de applicationhost.config
sur votre machine.
\.vs\config
Dans ce dossier, vous verrez votre fichier applicationhost.config .
Sinon, vous pouvez simplement rechercher le fichier .config dans votre dossier de solutions et le trouver ainsi.
J'ai personnellement utilisé la configuration suivante:
Avec ce qui suit dans mon fichier hosts:
127.0.0.1 jam.net
127.0.0.1 www.jam.net
Et ce qui suit dans mon fichier applicationhost.config:
<site name="JBN.Site" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="C:\Dev\Jam\shoppingcart\src\Web\JBN.Site" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:49707:" />
<binding protocol="http" bindingInformation="*:49707:localhost" />
</bindings>
</site>
N'oubliez pas de lancer votre instance de visual studio 2015 en tant qu'administrateur! Si vous ne voulez pas le faire à chaque fois que je recommande ceci:
Comment exécuter Visual Studio en tant qu'administrateur par défaut
J'espère que cela aidera quelqu'un. J'ai eu des problèmes lors de la mise à niveau vers Visual Studio 2015 et j'ai réalisé qu'aucune de mes configurations n'était reportée.
Lors de l'utilisation de Visual Studio 2012 avec IIS Express, la modification d'une liaison existante ne fonctionne pas de manière permanente. (Cela peut fonctionner jusqu'à ce que vous fermez VS, mais après cela, les choses se gâchent vraiment.)
La clé garde la liaison localehost existante et ajoute une nouvelle liaison après celle-ci.
À moins que vous ne fonctionniez en tant qu'administrateur, vous devrez également exécuter netsh add urlacl
(pour vous autoriser à exécuter un site non hôte local en tant qu'utilisateur standard).
Si vous souhaitez autoriser un nom d'hôte, le processus complet est le suivant:
À partir d'une invite de l'administrateur, exécutez les commandes suivantes (en remplaçant le numéro de port par le numéro de port indiqué au numéro 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 sécurité accrue.
Ajoutez une liaison supplémentaire avec le nom d'hôte souhaité (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 voulez ouvrir tous les noms d'hôte (*), 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); seul celui avec votre nom d'hôte spécifique est suffisant.
Le nom d'hôte non valide indique que le site que vous avez configuré dans le fichier de configuration IIS Express est (très probablement) en cours d'exécution. IIS Express n'a pas de modèle de processus comme IIS.
Pour que votre site s'exécute, il doit être démarré explicitement (soit en ouvrant et en accédant à partir de webmatrix, soit en utilisant la ligne de commande appelant iisexpress.exe (à partir de son répertoire d'installation) avec le paramètre/site.
En général, les étapes permettant d'autoriser l'utilisation de noms DNS qualifiés complets pour l'accès local sont les suivantes: utilisons votre exemple de nom DNS dev.example.com
Configurez la liaison IIS Express pour votre site (par exemple, Site1) afin d'inclure dev.example.com. Un privilège administratif sera nécessaire pour utiliser la liaison. Vous pouvez également effectuer une réservation URL unique avec http.sys à l'aide de
netsh http add urlacl url=http://dev.example.com:<port>/ user=<user_name>
démarrez iisexpress /site:Site1
ou ouvrez Site1 dans WebMatrix
Sur mon WebMatrix IIS L'installation rapide changeant de "*:80:localhost"
à "*:80:custom.hostname"
ne fonctionnait pas ("Nom d'hôte incorrect", même avec les mappages adéquats etc\hosts), mais "*:80:"
a fonctionne - et sans aucune des étapes supplémentaires requises par les autres réponses ici. Notez que "*:80:*"
ne le fera pas; quitter le deuxième astérisque.
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 le IDE en tant que l'EDI). Mais ce qui précède m’amène à la solution (après environ 2 heures de frappe contre un mur pour l’intégrer à Visual Studio 2012/Windows 8), voici ce qui a finalement fonctionné 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>
Administrator
afin qu'il puisse se lier à des adresses extérieures (pas l'hôte local)Administrator
pour qu'il puisse démarrer le processus en tant qu'administrateur, permettant ainsi à la liaison de prendre place.Le résultat net est que vous pouvez accéder à 192.168.2.102
dans mon cas et le tester (par exemple dans un émulateur Android. _. J'espère vraiment que cela aidera quelqu'un d'autre car ce fut définitivement un processus irritant pour moi.
Apparemment, c'est une fonctionnalité de sécurité que j'aimerais voir désactivée.
Comme Jessa Flint ci-dessus, je ne voulais pas éditer manuellement . Vs\config\applicationhost.config car je voulais que les modifications persistent dans le contrôle de code source. Je ne voulais pas non plus avoir un fichier de commandes séparé. J'utilise VS 2015 .
Propriétés du projet → Evénements de génération → Ligne de commande de l'événement de pré-génération:
::The following configures IIS Express to bind to any address at the specified port
::remove binding if it already exists
"%programfiles%\IIS Express\appcmd.exe" set site "MySolution.Web" /-bindings.[protocol='http',bindingInformation='*:1167:'] /apphostconfig:"$(SolutionDir).vs\config\applicationhost.config"
::add the binding
"%programfiles%\IIS Express\appcmd.exe" set site "MySolution.Web" /+bindings.[protocol='http',bindingInformation='*:1167:'] /apphostconfig:"$(SolutionDir).vs\config\applicationhost.config"
Assurez-vous simplement de changer le numéro de port sur le port de votre choix.
La réponse votée est valide .. et cette information m'a beaucoup aidé. Je sais que ce sujet a déjà été abordé, mais je voulais ajouter quelques informations supplémentaires. Les gens disent que vous devez "éditer manuellement" le fichier application.config dans le répertoire Users IISExpress/Config. Cela a été un gros problème pour moi parce que je voulais distribuer la configuration via le contrôle de code source à différents développeurs.
Ce que j’ai trouvé, c’est que vous pouvez automatiser la mise à jour de ce fichier à l’aide du programme "C:\Program Files\IIS Express\appcmd.exe". Il a fallu un certain temps pour connaître les paramètres de contrôle, mais je vais partager mes conclusions ici. Pour résumer, vous pouvez créer un fichier .bat qui exécute à la fois la commande NETSH et le fichier APPCMD.EXE (et éventuellement remplacer un fichier hôte si vous le souhaitez) pour faciliter la configuration de l'en-tête de l'hôte avec IIS Express.
Votre fichier de batte d'installation ressemblerait à ceci:
netsh http add urlacl url=http://yourcustomdomain.com:80/ user=everyone
"C:\Program Files\IIS Express\appcmd.exe" set site "MyApp.Web" /+bindings.[protocol='http',bindingInformation='*:80:yourcustomdomain.com']
Je vais également créer un fichier bat "Désinstaller" qui nettoiera ces liaisons.
netsh http delete urlacl url=http://yourcustomdomain.com:80/
"C:\Program Files\IIS Express\appcmd.exe" set site "MyApp.Web" /-bindings.[protocol='http',bindingInformation='*:80:yourcustomdomain.com']
J'espère que cette information est utile à quelqu'un .. Il m'a fallu un peu pour découvrir.
Suivant les conseils de Jaro, je suis parvenu à faire fonctionner cela sous Windows XP et IIS Express (installé via Web Matrix) avec une petite modification et n'était pas limité à localhost. C'est juste une question de régler les fixations correctement.
%USERPROFILE%\My Documents\IISExpress\config\applicationhost.config
(Windows XP. Vista et 7 chemins seront similaires) et éditez la définition de site dans le bloc <sites>
de config pour qu’elle corresponde à 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>
Si vous exécutez MVC, laissez le pool d'applicationsPool défini sur l'une des options "intégrées".
La solution de David est bonne. Mais j'ai trouvé que <script>alert(document.domain);</script>
dans la page alerte toujours "localhost" car l'URL du projet est toujours localhost même si elle a été remplacée par http://dev.example.com
. Un autre problème que je rencontre est qu'il me prévient que le port 80 a déjà été utilisé, même si j'ai désactivé Skype en utilisant le numéro de port 80 comme recommandé par David Murdoch. J'ai donc trouvé une autre solution beaucoup plus simple:
http://localhost:33333/
). , puis changez-le de http://localhost:33333/
à http://mydomain:333333/
Remarque: après ce changement, vous ne devez plus cliquer sur le bouton "Créer un répertoire virtuel" situé à droite de la zone URL du projet, ni sur le bouton Enregistrer du logiciel Visual Studio. comme ils ne seront pas réussis. Vous pouvez enregistrer vos paramètres après la prochaine étape 3.http://mydomain:333333/
, et <script>alert(document.domain);</script>
dans la page alertera "mydomain".Remarque: Le numéro de port indiqué ci-dessus est supposé être 33333. Vous devez le remplacer par le numéro de port défini par votre studio visuel.
Publication modifiée: Aujourd'hui, j'ai essayé avec un autre nom de domaine et j'ai obtenu l'erreur suivante: Impossible de lancer le serveur Web IIS Express. Échec d'enregistrement de l'URL ... L'accès est refusé. (0x80070005) . Je quitte le IIS Express en cliquant avec le bouton droit de la souris sur l'icône IIS Express située dans le coin droit de la barre des tâches de Windows, puis je redémarre Visual Studio en tant qu'administrateur. Le problème est résolu. .
Laissant ceci ici juste au cas où quelqu'un aurait besoin de ...
J'avais besoin d'avoir des domaines personnalisés pour une configuration Wordpress Multisite dans IIS Express, mais rien n'a fonctionné jusqu'à ce que je lance Webmatrix/Visual Studio en tant qu'administrateur. Ensuite, j'ai pu lier des sous-domaines à la même application.
<bindings>
<binding protocol="http" bindingInformation="*:12345:localhost" />
<binding protocol="http" bindingInformation="*:12345:whatever.localhost" />
</bindings>
Ensuite, allez à http: //witely.localhost: 12345 / sera exécuté.
J'utilisais iisexpress-proxy (à partir de NPM) pour cela.