Comment activer la requête externe dans IIS Express?
Comment puis-je activer les requêtes distantes dans IIS Express? Scott Guthrie a écrit que c'est possible mais il n'a pas dit comment.
21 réponses
Il y a un article de blog sur le site de l'équipe IIS expliquant 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 de Windows XP Service Pack 2. Exécutez ensuite la commande suivante à partir d'une invite administrative:
httpcfg set urlacl /u http://vaidesg1:8080/ /a D:(A;;GX;;;WD)
Il y a trois changements que vous pourriez avoir besoin d'apporter.
- dites à IIS de se lier à toutes les adresses ip et tous les noms d'hôte. Dans votre fichier
.config
. Généralement:- VS 2015:
$(solutionDir)\.vs\config\applicationhost.config
- %userprofile%\My Documents\IISExpress\config\applicationhost.config
- VS 2015:
Trouvez l'élément de liaison de votre site et ajoutez
<binding protocol="http" bindingInformation="*:8080:*" />
- configurez le bit de Windows appelé ' http.sys'. En tant qu'administrateur, exécutez la commande:
netsh http add urlacl url=http://*:8080/ user=everyone
Où everyone
est un groupe windows. Utilisez des guillemets doubles pour groupes avec des espaces comme "Tout le monde".
-
Autoriser 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
Ou 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 " / "
Je me souviens 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 proxy simple spécifiquement pour ce genre de scénario: https://github.com/icflorescu/iisexpress-proxy .
En utilisant le Proxy IIS Express , tout devient assez simple-pas besoin de "netsh http add urlacl url = vaidesg: 8080 / user = everyone" ou de gâcher avec votre " applicationhost.config".
Il suffit D'émettre ceci dans la commande invite:
iisexpress-proxy 8080 to 3000
... et vous pouvez ensuite pointer vos périphériques distants vers http://vaidesg:3000 .
La plupart du temps plus simple est mieux.
Rien n'a fonctionné pour moi jusqu'à ce que je trouve 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 localhost: 51123 et que vous souhaitez accéder à l'adresse IP externe x. x. x. x: 81
Edit: juste pour mentionner que cela fonctionne très bien avec noip.com
Une bonne ressource est Travailler avec SSL au moment du développement est plus facile avec IISExpress par Scott Hanselman.
Ce que vous recherchez, c'est la section permettant à IIS Express de servir en externe sur le Port 80
Comme une note latérale à 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 autre chose, par exemple:
- "Iedereen" lors de l'utilisation d'une version néerlandaise
- "Jeder" lors de l'utilisation d'une version allemande
- "Mindenki" lors de l'utilisation d'une version hongroise
Sinon, vous obtiendrez une erreur (Create SDDL failed, Error: 1332)
Je l'ai résolu avec l'installation de "Convoyeur Keyoti" dans Visual Studio Professional 2015. Convoyeur générer une adresse distante (votre IP) avec un port (45455) qui permettent la demande externe. Exemple:
Conveyor vous permet de tester des applications web à partir de tablettes et de téléphones externes sur votre réseau ou à partir 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
Si vous travaillez avec Visual Studio, procédez comme suit pour accéder à L'adresse IIS-Express Via IP:
- obtenez votre adresse IP hôte:
ipconfig
dans la ligne de commande Windows -
GoTo
$(SolutionDir)\.vs\config\applicationHost.config
-
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>
-
Ajouter:
<binding protocol="http" bindingInformation="*:62549:192.168.178.108"/>
avec votre adresse IP - exécutez votre Visual Studio avec des droits D'administrateur et tout devrait fonctionner
- peut-être chercher des problèmes de pare-feu si vous essayez de vous connecter à distance
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
Ce qui m'a aidé, c'était un clic droit sur l'icône 'IISExpress', 'afficher toutes les applications'. Puis en sélectionnant le site web et j'ai vu quel aplicationhost.config il utilise, et la correction s'est parfaitement déroulé.
La réponse acceptée à cette question est un guide pour faire fonctionner IIS Express avec webmatrix. J'ai trouvé ce guide plus utile en essayant de le faire fonctionner avec VS 2010.
Je viens de suivre les étapes 3 et 4 (exécutant IIS Express en tant qu'administrateur) et j'ai dû désactiver temporairement mon pare-feu pour le faire fonctionner.
C'est ce que j'ai fait pour Windows 10 avec Visual Studio 2015 pour activer l'accès à distance, à la fois avec http et https:
La première étape consiste à lier votre application à votre adresse IP interne. Exécuter cmd
-> ipconfig
pour obtenir l'adresse. Ouvrez le fichier /{project folder}/.vs/config/applicationhost.config
et faites défiler jusqu'à ce que vous trouviez 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 également utiliser HTTPS si vous le souhaitez:
<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
Démarrez maintenant Visual Studio comme Administrator
. Cliquez avec le bouton droit sur le fichier de projet web projects et sélectionnez Properties
. Allez dans 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.
Vous pouvez essayer de configurer la redirection de port au lieu d'essayer de modifier votre configuration IIS Express, en ajoutant un nouveau HTTP.règles sys ou exécution de Visual Studio en tant Qu'administrateur.
Fondamentalement, vous devez transférer le IP:PORT
sur votre site web vers un autre port libre sur votre machine mais sur la carte réseau externe, pas localhost.
La chose est que IIS Express (au moins sur Windows 10) se lie à [::1]:port
ce qui signifie qu'il écoute sur le port IPv6. Vous avez besoin de prendre cela en 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.
J'ai quelques problèmes en utilisant IIS Express Dans Win 8.1 et demande externe.
Je suis cette étape pour déboguer la requête externe:
- installer IIS
- configurez Visual Studio pour utiliser IIS local (propriétés de la Page dans votre projet Web)
- créez un AppPool exclusif dans IIS pour travailler avec mon application
- dans mon projet, j'utilise le Client Oracle et doit être 32 bits (64 bits ne fonctionnent pas avec Visual Studio) alors j'ai besoin d'autoriser 32 bits dans L'Application Piscine
- configurez le pare-feu Windows pour autoriser la requête dans le port 80 (règles entrantes)
Ça marche!
Si vous exécutez Visual Studio depuis Admin, Vous pouvez ajouter juste
<binding protocol="http" bindingInformation="*:8080:*" />
Ou
<binding protocol="https" bindingInformation="*:8443:*" />
Dans
%userprofile%\My Documents\IISExpress\config\applicationhost.config
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 frais que l'autre méthode car il est plus facile à enlever une fois que je me suis fait développer... Voici à quoi ressemble la réécriture..
<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 en utilisant directement votre IIS local (ce qui permet ensuite les connexions à distance) mais à son tour, vous devez toujours l'exécuter en tant qu'administrateur... Je n'aime pas ça.
Je n'ai pas pu servir les requêtes 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.
C'est incroyablement génial et couvre même HTTPS avec de jolis noms de domaine:
Http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx
Les parties vraiment géniales que je n'ai pu trouver nulle part ailleurs, donc au cas où le lien ci-dessus disparaîtrait:
> 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 super facile.
Si vous voulez faire les choses à la dure, le 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 la "Empreinte" que vous pouvez obtenir à partir des propriétés du certificat dans MMC.
J'ai fait ce qui suit et j'ai pu me connecter:
1) Modification de la liaison IIS express config de l'hôte local à '* '
Protocole d'accord="http" bindingInformation="*:8888:*"
2) Règle d'entrée définie sur le pare-feu pour autoriser le port particulier pour le type de protocole: tcp
3) Ajoutez la commande suivante pour ajouter la configuration réseau de votre port: netsh http Ajouter urlacl url = http://*: 8888 / user = tout le monde
J'ai résolu ce problème en utilisant l'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>
[boîte de dialogue Propriétés du projet]
Pour le développement en utilisant VisualStudio 2017 et un projet API NetCore:
1) Dans Cmd-Box: ipconfig / all pour déterminer L'adresse IP
2a) entrez l'adresse IP récupérée dans Propriétés du projet - > onglet Débogage
2b) sélectionnez un Port et attachez-le à l'adresse IP de l'étape 2a.
3) Ajoutez une règle d'autorisation dans le pare-feu pour autoriser le trafic TCP entrant sur le Port sélectionné (mon pare-feu s'est déclenché avec une boîte de dialogue: "bloquer ou ajouter une règle à pare"). Ajoutez dans ce cas faire l'affaire.
Inconvénient de la solution ci-dessus:
1) Si vous utilisez une adresse IP dynamique, vous devez refaire les étapes ci-dessus au cas où une autre adresse IP aurait été attribuée.
2) votre serveur a maintenant un Port ouvert que vous pourriez oublier, mais ce port ouvert reste une invitation pour les invités indésirables.