web-dev-qa-db-fra.com

Comment activer la requête externe dans IIS Express?

Comment puis-je activer les demandes distantes dans IIS Express? Scott Guthrie a écrit que c'est possible mais il n'a pas dit comment.

411
TedTel

Un article de blog sur le site d'équipe IIS explique maintenant comment activer les connexions distantes sur IIS Express . Voici la partie pertinente de ce post résumée:

Sur Vista et Win7, exécutez la commande suivante à partir d'une invite administrative:

netsh http add urlacl url=http://vaidesg:8080/ user=everyone

Pour XP, installez d’abord les outils de support Windows XP Service Pack 2. Ensuite, exécutez la commande suivante à partir d'une invite administrative:

httpcfg set urlacl /u http://vaidesg1:8080/ /a D:(A;;GX;;;WD)

387
Damian Edwards

Vous devrez peut-être apporter trois modifications. 

  1. Indiquez à IIS Express de se lier à toutes les adresses IP et à tous les noms d'hôte. Dans votre fichier .config. Typiquement:
    • VS 2015: $(solutionDir)\.vs\config\applicationhost.config
    • <VS 2015: %userprofile%\My Documents\IISExpress\config\applicationhost.config

Trouvez l'élément de liaison de votre site et ajoutez

    <binding protocol="http" bindingInformation="*:8080:*" />
  1. Configurez le bit de Windows appelé 'http.sys'. En tant qu'administrateur, exécutez la commande suivante:
    netsh http add urlacl url=http://*:8080/ user=everyone

everyone est un groupe Windows. Utilisez des guillemets pour les groupes avec des espaces tels que "Tout le monde".

  1. Autorisez IIS Express via le pare-feu Windows. 

    Démarrer/Pare-feu Windows avec sécurité avancée/Règles entrantes/Nouvelle règle ...

    Programme %ProgramFiles%\IIS Express\iisexpress.exe
    OR Port 8080 TCP

Maintenant, lorsque vous démarrez iisexpress.exe, vous devriez voir un message tel que

URL enregistrée avec succès "http: // *: 8080 /" pour le site "hello world" application "/" 

329
Colonel Panic

Je me souviens d'avoir rencontré les mêmes problèmes en essayant ce flux de travail il y a quelques mois.

C'est pourquoi j'ai écrit un utilitaire de proxy simple spécifiquement pour ce type de scénario: https://github.com/icflorescu/iisexpress-proxy .

En utilisant le IIS Express Proxy , tout devient assez simple: inutile de «ajouter http neth urlacl url = vaidesg: 8080/user = everyone» ou de vous ennuyer avec votre «applicationhost.config».

Il suffit d’envoyer cette invite de commande:

iisexpress-proxy 8080 to 3000

… Et vous pouvez ensuite diriger vos périphériques distants vers http: // vaidesg: 3000 .

La plupart du temps, plus simple IS mieux.

113

Rien n'a fonctionné pour moi jusqu'à ce que j'ai trouvé iisexpress-proxy

Ouvrez l'invite de commande en tant qu'administrateur, puis exécutez

npm install -g iisexpress-proxy

puis

iisexpress-proxy 51123 to 81

en supposant que votre projet Visual Studio s'ouvre sur l'hôte local: 51123 et que vous souhaitez accéder à l'adresse IP externe x.x.x.x: 81

Edit: J'utilise actuellement ngrok

94
Toolkit

Une bonne ressource est Travailler avec SSL au moment du développement est plus facile avec IISExpress de Scott Hanselman.

Ce que vous recherchez, c’est la section Obtenir que IIS Express serve en externe sur le port 80

33
Luke Sampson

En tant que sidenote à ceci:

netsh http add urlacl url=http://vaidesg:8080/ user=everyone

Cela ne fonctionnera que sur les versions anglaises de Windows. Si vous utilisez une version localisée, vous devez remplacer "tout le monde" par quelque chose d'autre, par exemple:

  • "Iedereen" en utilisant une version néerlandaise
  • "Jeder" en utilisant une version allemande
  • "Mindenki" lors de l'utilisation d'une version hongroise

Sinon, vous obtiendrez une erreur (échec de la création de SDDL, erreur: 1332).

30
breez

Si vous travaillez avec Visual Studio, procédez comme suit pour accéder à l'adresse IP d'IIS-Express via:

  1. Obtenez votre adresse IP hôte: ipconfig dans la ligne de commande Windows
  2. Aller à 

    $(SolutionDir)\.vs\config\applicationHost.config
    
  3. Trouver 

    <site name="WebApplication3" id="2">
       <application path="/" applicationPool="Clr4IntegratedAppPool">
          <virtualDirectory path="/" physicalPath="C:\Users\user.name\Source\Repos\protoype-one\WebApplication3" />
       </application>
       <bindings>
         <binding protocol="http" bindingInformation="*:62549:localhost" />
       </bindings>
    </site>
    
  4. Ajouter: <binding protocol="http" bindingInformation="*:62549:192.168.178.108"/>
    avec votre adresse IP

  5. Exécutez votre Visual Studio avec les droits d’administrateur et tout devrait fonctionner
  6. Peut-être cherchez-vous des problèmes de pare-feu si vous essayez de vous connecter à distance
21
Daniel Eisenreich

Je l'ai résolu avec l'installation de "Conveyor by Keyoti" dans Visual Studio Professional 2015. Le convoyeur génère une adresse REMOTE (votre IP) avec un port (45455) permettant la requête externe. Exemple:

 enter image description here

Conveyor vous permet de tester des applications Web à partir de tablettes et de téléphones externes sur votre réseau ou d'émulateurs Android (sans http://10.0.2.2:<hostport>).

Les étapes sont dans le lien suivant:

https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti

16
Ronny Morán

Si vous avez essayé La réponse du colonel Panic mais ne fonctionne pas dans Visual Studio, essayez ceci:

Ajoutez un autre <binding /> dans votre configuration IIS Express

<bindings>
    <binding protocol="http" bindingInformation="*:8080:localhost" />
    <binding protocol="http" bindingInformation="*:8080:hostname" />
</bindings>

Enfin, vous devez exécuter Visual Studio en tant qu'administrateur

10
Bruce

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

7
Emmanuel

La réponse acceptée à cette question est un guide pour que IIS Express fonctionne avec webmatrix. J'ai trouvé ce guide plus utile pour essayer de le faire fonctionner avec VS 2010.

Je venais de suivre les étapes 3 et 4 (exécuter IIS Express en tant qu'administrateur) et devais désactiver temporairement mon pare-feu pour le faire fonctionner.

5
Chad

Voici ce que j'ai fait pour Windows 10 avec Visual Studio 2015 pour permettre l'accès à distance, à la fois avec http et https:

La première étape consiste à lier votre application à votre adresse IP interne. Exécutez cmd -> ipconfig pour obtenir l'adresse. Ouvrez le fichier /{project folder}/.vs/config/applicationhost.config et faites défiler jusqu'à trouver quelque chose comme ceci:

<site name="Project.Web" id="2">
    <application path="/">
        <virtualDirectory path="/" physicalPath="C:\Project\Project.Web" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:12345:localhost" />
    </bindings>
</site>

Ajoutez deux nouvelles liaisons sous bindings. Vous pouvez aussi utiliser HTTPS si vous aimez:

<binding protocol="http" bindingInformation="*:12345:192.168.1.15" />
<binding protocol="https" bindingInformation="*:44300:192.168.1.15" />

Ajoutez la règle suivante à votre pare-feu, ouvrez une nouvelle invite cmd en tant qu'administrateur et exécutez les commandes suivantes:

netsh advfirewall firewall add rule name="IISExpressWeb" dir=in protocol=tcp localport=12345 profile=private remoteip=localsubnet action=allow

netsh advfirewall firewall add rule name="IISExpressWebHttps" dir=in protocol=tcp localport=44300 profile=private remoteip=localsubnet action=allow

Maintenant démarrez Visual Studio en tant que Administrator. Cliquez avec le bouton droit sur le fichier de projet de projets Web et sélectionnez Properties. Accédez à l'onglet Web et cliquez sur Create Virtual Directory. Si Visual Studio n'est pas exécuté en tant qu'administrateur, cela échouera probablement. Maintenant tout devrait fonctionner.

 enter image description here

5
Ogglas

Vous pouvez essayer de configurer le transfert de port au lieu de modifier votre configuration Express IIS, d’ajouter de nouvelles règles HTTP.sys ou d’exécuter Visual Studio en tant qu’administrateur. 

Fondamentalement, vous devez transférer le IP:PORT de votre site Web sur un autre port libre de votre ordinateur, mais sur la carte réseau externe, pas sur l’hôte local. 

Le problème est que IIS Express (au moins sous Windows 10) se lie à [::1]:port, ce qui signifie qu’il écoute sur le port IPv6. Vous devez en tenir compte.

Voici comment j'ai fait ce travail - http://programmingflow.com/2017/02/25/iis-express-on-external-ip.html

J'espère que ça aide.

4
srmrco

J'ai quelques problèmes à utiliser IIS Express dans Win 8.1 et une requête externe.

Je suis cette étape pour déboguer la demande externe: 

  1. Installer IIS
  2. Configurez Visual Studio pour utiliser local IIS (propriétés de la page dans votre projet Web)
  3. Créer un AppPool exclusif dans IIS pour utiliser mon application
  4. Dans mon projet, j'utilise un client Oracle et doit être 32 bits (64 bits ne fonctionnent pas avec Visual Studio), puis-je autoriser 32 bits dans le pool d'applications
  5. Configurez le pare-feu Windows pour autoriser les requêtes sur le port 80 (règles entrantes)

Ça marche!

3
Robson Douglas

La façon la plus simple et la plus cool que j'ai trouvée était d'utiliser (l'installation prend 2 minutes):

https://ngrok.com/

Cela fonctionnera avec tout ce qui tourne sur localhost. Inscrivez-vous simplement, lancez un peu d'argent et tout ce que vous utilisez sur localhost obtient une URL publique à laquelle vous pouvez accéder de n'importe où. 

C'est bien pour montrer des choses à vos coéquipiers distants, pas de bidouillage avec la configuration IIS ou les pare-feu. Voulez-vous arrêter l'accès juste terminer l'exécutable.

ngrok authtoken xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

ngrok http -Host-header=localhost 89230

en supposant que 89230 est votre port IIS Express

Vous pouvez également exécuter plusieurs ports même sur plan gratuit

2
Artur Kędzior

J'avais un IIS local activé donc je viens de créer une règle de réécriture sur mon port de débogage ... Je pense que c'est mieux et plus cool qu'une autre méthode car il est plus facile de le supprimer une fois que j'ai terminé le développement ... la réécriture ressemble ..

<rewrite>
    <rules>
        <rule name="ReverseProxyInboundRule1" stopProcessing="true">
            <match url="^dev/(.*)" />
            <action type="Rewrite" url="http://localhost:47039/{R:1}" />
        </rule>
    </rules>
</rewrite>

VS vous permet également de développer directement à l'aide de votre IIS local (ce qui permet ensuite les connexions distantes), mais vous devez toujours l'exécuter en tant qu'administrateur ... Je n'aime pas cela.

2
konzo

Si vous exécutez Visual Studio à partir de l’administrateur, vous pouvez ajouter uniquement

<binding protocol="http" bindingInformation="*:8080:*" />

ou 

<binding protocol="https" bindingInformation="*:8443:*" />

dans

%userprofile%\My Documents\IISExpress\config\applicationhost.config
2
Andrii

J'ai résolu ce problème en utilisant une approche de proxy inverse.

J'ai installé le serveur Wamp et utilisé la fonctionnalité de proxy inverse simple du serveur Web Apache.

J'ai ajouté un nouveau port pour écouter le serveur Web Apache (8081). Ensuite, j'ai ajouté la configuration du proxy en tant que virtualhost pour ce port.

<VirtualHost *:8081>
ProxyPass / http://localhost:46935/
ProxyPassReverse / http://localhost:46935/
</VirtualHost>
0
mustafacanturk

J'ai fait ce qui suit et j'ai pu me connecter:

1) changé IIS liaison de config express liant l'hôte local à '*'

protocole de liaison = "http" bindingInformation = "*: 8888: *" 

2) règle entrante définie sur le pare-feu pour autoriser le port particulier pour le type de protocole: tcp

3) Ajoutez la commande suivante pour ajouter une configuration réseau pour votre port: netsh http add urlacl url = http: // *: 8888/utilisateur = tout le monde

0
dhakalan

Je ne pouvais pas répondre aux demandes d'iis à d'autres utilisateurs de mon réseau local. Tout ce que j'avais à faire (en plus de ce qui précède) était de redémarrer mon routeur BT Hub.

0
Terry Kernan

C'est incroyablement génial et couvre même HTTPS avec de jolis noms de domaine:

http://www.hanselman.com/blog/WorkingWithSSLeadDevelopmentTimeIsEasierWithIISExpress.aspx

Les parties vraiment géniales que je n'ai pu trouver nulle part ailleurs sur SO au cas où le lien ci-dessus disparaîtrait jamais:

> C:\Program Files (x86)\IIS Express>IisExpressAdminCmd.exe Usage:
> iisexpressadmincmd.exe <command> <parameters> Supported commands:
>       setupFriendlyHostnameUrl -url:<url>
>       deleteFriendlyHostnameUrl -url:<url>
>       setupUrl -url:<url>
>       deleteUrl -url:<url>
>       setupSslUrl -url:<url> -CertHash:<value>
>       setupSslUrl -url:<url> -UseSelfSigned
>       deleteSslUrl -url:<url>
> 
> Examples: 1) Configure "http.sys" and "hosts" file for friendly
> hostname "contoso": iisexpressadmincmd setupFriendlyHostnameUrl
> -url:http://contoso:80/ 2) Remove "http.sys" configuration and "hosts" file entry for the friendly  hostname "contoso": iisexpressadmincmd
> deleteFriendlyHostnameUrl -url:http://contoso:80/

L'utilitaire ci-dessus enregistrera le certificat SSL pour vous! Si vous utilisez l'option -UseSelfSigned, c'est très simple.

Si vous voulez faire les choses à la dure, la partie non évidente est que vous devez dire à HTTP.SYS quel certificat utiliser, comme ceci:

netsh http add sslcert ipport=0.0.0.0:443 appid={214124cd-d05b-4309-9af9-9caa44b2b74a} certhash=YOURCERTHASHHERE

Certhash est l'empreinte numérique que vous pouvez obtenir à partir des propriétés du certificat dans MMC.

0
eselk

J'ai fait toutes ces étapes et rien ne m'a aidé. Et ce dont j'ai besoin, c'est juste pour exécuter mon application via IIS Express ... 

 enter image description here

J'espère que ça aide.

0
Maksym Labutin