70 votes

Utiliser IIS Express pour héberger un site web (temporairement)

J'ai un site web (MVC3) qui, pour le développement, est hébergé dans IIS Express. (Je suis tombé sur un bug de Cassini Devserver et j'ai dû faire une mise à jour...) Maintenant, je me demande s'il est possible de laisser d'autres machines sur mon réseau local (derrière un routeur) voir le site comme étant hébergé sur ma machine ? (par exemple, si j'écris http://my.local.ip:port dans un navigateur sur le même réseau local que moi, la page se chargera-t-elle ?)

120voto

vikomall Points 9130

Par défaut, IIS Express ne répond qu'aux demandes de l'hôte local. Pour servir les requêtes externes, modifiez applicationhost.config (situé dans %userprofile%\documents\iisexpress\config\ ) et changer localhost a '*' ou le nom de votre machine. (rappelez-vous que pour la liaison non-localhost, vous devez être exécuté en tant qu'administrateur ou définir l'acl de l'URL en tant qu'administrateur et ensuite exécuter iisexpress en tant que non-administrateur).

12voto

Brian Chavez Points 2507

Alternativement, vous pouvez utiliser quelque chose comme PortMapper d'AnalogX pour agir comme un petit proxy de bouclage vers tunnel des ports privés liés au localhost vers des ports ouverts publiquement.

Par exemple,

  • IISExpress est localement lié à localhost:8080
  • PortMapper port 9090 est configuré pour relayer le trafic vers localhost:8080

En effet, toute connexion sur le port 9090 (ouvert par PortMapper ) sera acheminé vers localhost:8080 ; ce qui permet de contourner toutes les absurdités de netsh qui peuvent parfois être pénibles.

Voici ma configuration :

PortMapper configuration

L'avantage de cette méthode est qu'elle n'expose pas de façon permanente un système ouvert IISExpress sur la boîte de dev locale.

Dans de rares cas, il m'arrive de vouloir ouvrir le port publiquement pour des réunions, mais la plupart du temps, le port doit être fermé et n'être accessible que par localhost. Modifier les règles du pare-feu sur le routeur à chaque fois est un casse-tête. Voici comment j'ai configuré les choses :

  • Le pare-feu de mon routeur transmet 9090 port pour PortMapper
  • PortMapper continue seulement à transmettre le trafic par proxy à IISExpress (écoute sur 8080 ) seulement si PortMapper est en cours.

Nota

Assurez-vous de fermer tous les PortMapper Windows pour que les changements prennent effet.

Note 2

Comme d'autres l'ont décrit, il se peut que vous deviez ajuster les paramètres de l'appareil. IISExpress pour votre application dans

 My Documents\IISExpress\applicationhost.config
 project\.vs\config\applicationhost.config

à quelque chose comme :

<bindings>
  <!-- bindingInformaiton format:
          IPToBindTo:Port:DNSHostName -->

  <!--OLD:
  <binding protocol="http" bindingInformation="*:8080:localhost"/>-->

  <!--Change '*' to 127.0.0.1 and remove 'localhost' right of the port number
      to avoid invalid DNS hostname errors -->
  <binding protocol="http" bindingInformation="127.0.0.1:8080:" />

</bindings>

6voto

kevinc Points 96

Je pense qu'il y a trois étapes à franchir pour que cela soit un succès :

1) Ajoutez une entrée dns ou des entrées hosts pour que les autres machines puissent chercher l'adresse ip de la machine dev.

2) Ajoutez une liaison à applicationhost.config dans %userprofile/documents/IISExpress/Config comme ceci

<site name="MobileDashboard(2)" id="7">
                <bindings>
                    ...
                    <binding protocol="http" bindingInformation="*:yourport#:yourmachinendnsname" />
                </bindings>
            </site>

3) Exécutez la commande trouvée aquí pour autoriser les demandes entrantes :

netsh http add urlacl url=http://yourmachinendnsname:yourport#/ user=everyone

4voto

Fyberoptik Points 33

La réponse dans ce fil de discussion est excellente, elle ne tient pas compte des exceptions du pare-feu.

netsh advfirewall firewall add rule name="IIS Express (non-SSL)" action=allow protocol=TCP dir=in localport=8000

netsh advfirewall firewall add rule name="IIS Express (SSL)" action=allow protocol=TCP dir=in localport=44300

Tiré des commentaires @ http://blogs.iis.net/vaidyg/archive/2010/07/29/serving-external-traffic-with-webmatrix-beta.aspx

2voto

gius Points 4298

L'astuce de la règle personnalisée dans Fiddler de http://blogs.microsoft.co.il/blogs/shair/archive/2008/12/15/how-to-use-fiddler-on-localhost.aspx a fini par fonctionner pour moi.

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