ASP.Net : Accéder à votre site en développement depuis un autre poste (fr-FR)
Lors d'un développement ASP.NET sous Visual Studio on utilise IIS Express qui permet de faire du débogage de nos sites Web.
Une des difficulté que l'on rencontre réside dans le fait que IIS Express ne permet qu'un accès via le nom "localhost". Résultat impossible de tester notre site depuis un smartphone ou une tablette par exemple.
En cherchant sur le net on trouve des réponses à ce problème, toutefois je ne sais pas s'il y a eu des modifications entre temps, mais toutes les solutions que j'ai essayées ne fonctionnent pas complètement. Résultat je suis parvenu à faire un mix, et sur une machine française s'il vous plaît, car ça aussi c'est une petite blague (mais très petite).
Définir le port à ouvrir
Donc première chose : vous munir du port réservé par Visual Studio dans votre projet. Pour cela lancez votre projet et regardez l'URL, où de vous rendre dans les propriétés de votre projet onglet "Web" où vous trouverez l'URL du projet avec son port.
Une fois le port déterminé, fermez Visual Studio et vérifiez que IIS Express ne s'exécute plus: dans la systray (zone d'icône a coté de l'horloge) si vous trouvez une icône "IIS Express", faites un clic droit dessus pour afficher le menu, et quitter l'application.
Configurer le pare-feu
Dans le pare-feu de Windows (si ce dernier est actif) ajouter une règle entrante autorisant le port du site web.
Vous pouvez également dans un invité de commande en mode administrateur, exécuter la commande :
netsh advfirewall firewall add rule name="IISExpressWeb" dir=in protocol=tcp localport=55713 action=allow
Vous pouvez ajouter d'autres paramètres de configuration, pour celà je vous renvoi à la documentation de netsh.
Configurer IIS Express
Dans votre dossier "Mes documents" (ou "Documents" dans votre dossier utilisateur sous Win8) vous trouvez un dossier "IISExpress\config". Dans se dossier se trouve un fichier "applicationhost.config".
Editez ce fichier et rechercher une ligne contenant une balise XML avec votre port, par exemple :
<binding protocol="http" bindingInformation="*:55713:localhost" />
Dupliquez ce nœud en l'ajoutant à la suite du premier et en modifiant "localhost" par l'adresse IP sur laquelle vous voulez-vous connecter (adresse IP de votre ordinateur dans votre réseau local). Vous obtenez quelque chose comme :
<binding protocol="http" bindingInformation="*:55713:localhost" />
<binding protocol="http" bindingInformation="*:55713:192.168.1.1" />
Enregistrez le fichier.
Autoriser l'écoute de votre adresse IP et port
Lancez un invité de commande en mode administrateur, puis lancez la commande suivante :
netsh http add urlacl url=http://192.168.1.1:55713/ "user=Tout le monde"
Attention à bien saisir l'adresse IP avec le port. De même pour la partie "user", il s'agit du groupe autorisé, la plupart des exemples trouvés étant en anglais le groupe se nomme "Everyone", mais comme j'ai un poste en français, il faut penser à traduire le nom du groupe (c'est la fameuse petite blague dont je parlais en introduction).
Voilà a partir de maintenant IIS Express est autorisé à écouter votre adresse IP et votre port quelque soit la source.
Vérifier le bon fonctionnement
Relancez Visual Studio, et exécutez votre projet. Dans la systray (zone d'icône a coté de l'horloge) se trouve une icône "IIS Express", faire un clic-droit et sélectionner le menu "Afficher toutes les applications". Vous devez voir apparaître votre site deux fois ; une avec le localhost et l'autre avec votre adresse IP.
Maintenant vous pouvez tester l'accès via votre adresse IP, et ceci même depuis votre poste de développement, pour celà il suffit d'indiquer votre adresse IP au lieu de "localhost".
Méthode plus avancée
Certaines solutions trouvées sur internet indique d'utiliser l'étoile "*" au lieu de l'adresse IP dans la commande "netsh". Cela permet de dire à IIS Express d'écouter TOUTES les adresse IPs que vous avez définies sur votre poste.
Personnellement je ne l'utilise pas car pour que cela fonctionne IIS Express doit obligatoirement être exécuté en mode administrateur, par conséquent de lancer Visual Studio en mode administrateur, ce qui me fait perdre mes raccourcis sur mes projets. Je préfère donc lancer une commande "netsh" pour chaque IP une seule fois pour toute.
En revanche je ne suis jamais parvenu à faire fonctionner l'étoile dans le fichier de configuration à la place de l'adresse IP.