J'ai une application de test ASP.NET MVC3 développée dans VS2012. Lorsque je commence le débogage, l'application est accessible à partir de la machine hôte via la demande à http://localhost:<portnumber>
. Mais si j'essaie d'accéder à la même application à partir de la machine distante dans l'intranet via le http://<ip>:<portnumber>
, je reçois HTTP error 400: Bad request. Invalid Host Name.
Tant qu'il s'exécute sur IIS Express, toute configuration de serveur est inaccessible.
Y at-il des moyens de résoudre ce problème?
Mettre à jour
J'ai fait une vidéo qui décrit mieux le processus, https://youtu.be/5ZqDuvTqQVV
Si vous utilisez VS2013 ou une version ultérieure, assurez-vous de l'exécuter en tant qu'administrateur pour que cela fonctionne.
%USERPROFILE%\My Documents\IISExpress\config\applicationhost.config
(dans VS2015, il peut s'agir de $(solutionDir)\.vs\config\applicationhost.config
). À l'intérieur, vous devriez voir quelque chose comme ceci:<site name="WebSite1" id="1" serverAutoStart="true">
<application path="/">
<virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:8080:localhost" />
</bindings>
</site>
Changez le bindingInformation=":8080:localhost"
en bindingInformation="*:8080:*"
(le numéro de port, 8080 dans mon cas, sera différent.)
Note: Si cela ne fonctionne pas, essayez avec bindingInformation="*:8080:
, l'astérix peut être supprimé.
Assurez-vous ensuite que votre pare-feu autorise les connexions entrantes sur ce port. Vous devrez peut-être redémarrer le système ou au moins Visual Studios pour que IISExpress recharge le fichier de configuration.
Si cela ne fonctionne pas, jetez un oeil à cette réponse: https://stackoverflow.com/a/5186680/985284
Dans votre répertoire de solution, dans le fichier .vs\config\applicationHost.config
, changez la ligne
<binding protocol="http" bindingInformation="*:44302:localhost" />
à
<binding protocol="http" bindingInformation=":44302:" />
(où 44302 est votre port)
À partir d'une invite de commande d'administration:
je. Activer les non-administrateurs pour qu'ils se lient au port
netsh http add urlacl url=http://*:44302/ user=Everyone
ii. Autoriser à travers le pare-feu
netsh advfirewall firewall add rule name="IISExpress visualstudio app" protocol=tcp localport=44302 dir=in action=allow
Hormis pour modifier le fichier de configuration iisexpress, vous devez parfois exécuter la commande comme ci-dessous.
netsh http add urlacl url = http: // *: 49419/user = Tout le monde
Étant donné que je ne peux pas ajouter de commentaire au message de @Garret Fogerlie et en réponse au problème des commentateurs (@ Y.Ecarri et @SamuelEdwinWard), j'ai suivi ce que Garret avait suggéré, à l'aide de Visual Studio 2013, en l'exécutant en mode Admin et en modifiant les paramètres. application.config
fichier.
Après avoir lancé le débogage et constaté que le même message d'erreur apparaissait, je suis retourné dans application.config
et constaté qu'une nouvelle entrée pour mon site avait été créée, à l'instar du problème de Y.Ecarri.
J'ai donc arrêté le débogage, gardé ma solution ouverte dans Visual Studio , et modifié à nouveau le fichier application.config
pour la nouvelle entrée. J'ai également simplement supprimé le *
qui chante et le localhost
entièrement, donc j'avais les éléments suivants pour la nouvelle entrée:
<binding protocol="https" bindingInformation=":44300:" />
Comment éviter d'exécuter Visual Studio en tant qu'administrateur
En utilisant à la fois la réponse de Garret et @ shangkeyun , vous pouvez vous connecter au site Web en cours d'exécution sans avoir à exécuter Visual Studio en tant qu'administrateur:
%USERPROFILE%\My Documents\IISExpress\config\applicationhost.config
name=MySiteName
<binding>
existant dans la section <bindings>
. Vous devriez maintenant avoir deux lignes avec binding
.Cela devrait maintenant ressembler à ceci, en supposant que le port est 12345
:
<binding protocol="http" bindingInformation="*:12345:localhost" />
<binding protocol="http" bindingInformation="*:12345:" />
Supprimez toutes les restrictions de pare-feu en exécutant la commande suivante en tant qu'administrateur:
netsh http add urlacl url=http://*:49419/ user=Everyone
Merci à byteit:
Accédez à applicationhost.config dans Documents/IISExpress/config.
recherchez l'entrée correspondant au site sur lequel vous travaillez:
ajouter:
<binding protocol="http" bindingInformation="*:<your site port>:*" />
devant l'existant
<binding protocol="http" bindingInformation="*:<your site port>:localhost" />
Pour obtenir la solution sans avoir VS2013, créez une nouvelle entrée XML de site Web au redémarrage. Vous devrez exécuter en tant qu'administrateur.
Si le problème était très similaire, le débogage dans Code Visual Studio , je l’ai résolu en ajoutant:
"env": {
// ...
"ASPNETCORE_URLS": "http://*:5000" // change to the port you are using
// ...
},
.. à launch.json
Apparemment, par défaut, il lie le protocole http à 'localhost: 5000', de sorte qu'il fonctionne avec localhost mais pas avec ip address - ni à distance ni localement.
Si vous essayez d'atteindre un point d'arrêt à la suite d'une demande provenant d'un autre ordinateur, n'oubliez pas de vérifier les paramètres de votre pare-feu (et/ou de votre antivirus).
j'espère que cela t'aides
Certains d'entre vous pourraient passer beaucoup de temps à modifier et à tester à l'aide de votre répertoire% USERPROFILE%. Si vous exécutez sur VS debug , utilisez $ (solutionDir) .vs\config\applicationhost.config
C'est ce qui a fonctionné pour moi:
C:\VSProjects
dans mon cas)Directory Browsing
dans la liste des options. Sur le côté droit, il y a un bouton Enable
. Cliquez dessus. Maintenant, je peux accéder à mon dossier et à ma corbeille de projets sur le réseau via mypcname\VSProjects\myProj\outputBinViewer
.