Ich habe eine ASP.NET MVC3-Testanwendung, die in VS2012 entwickelt wurde. Wenn ich mit dem Debuggen beginne, wird von der Host-Maschine aus über die Anforderung an http://localhost:<portnumber>
auf die App zugegriffen. Wenn ich jedoch versuche, dieselbe Anwendung von der Remote-Maschine im Intranet aus über http://<ip>:<portnumber>
aufzurufen, bekomme ich HTTP error 400: Bad request. Invalid Host Name.
. Soweit sie unter IIS Express ausgeführt wird, ist auf eine Serverkonfiguration kein Zugriff möglich.
Gibt es Möglichkeiten, dies zu lösen?
Update
Ich habe ein Video erstellt, das den Prozess besser beschreibt. https://youtu.be/5ZqDuvTqQVs
Wenn Sie VS2013 oder höher verwenden, stellen Sie sicher, dass Sie es als Administrator ausführen, damit dies funktioniert.
%USERPROFILE%\My Documents\IISExpress\config\applicationhost.config
(in VS2015 kann es sich um $(solutionDir)\.vs\config\applicationhost.config
handeln). Drinnen sollte man so etwas sehen:<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>
Ändern Sie den bindingInformation=":8080:localhost"
in bindingInformation="*:8080:*"
(die Portnummer, in meinem Fall 8080, wird abweichen.)
Hinweis: Wenn dies nicht funktioniert, versuchen Sie es mit bindingInformation="*:8080:
. Der Stern kann entfernt werden.
Stellen Sie dann sicher, dass Ihre Firewall an diesem Port eingehende Verbindungen zulässt. Möglicherweise müssen Sie das System oder mindestens Visual Studios neu starten, damit IISExpress die Konfigurationsdatei neu lädt.
Wenn dies nicht funktioniert, schauen Sie sich diese Antwort an: https://stackoverflow.com/a/5186680/985284
Ändern Sie in Ihrem Lösungsverzeichnis in der Datei .vs\config\applicationHost.config
die Zeile
<binding protocol="http" bindingInformation="*:44302:localhost" />
zu
<binding protocol="http" bindingInformation=":44302:" />
(wobei 44302 Ihr Hafen ist)
Von einer Admin-Eingabeaufforderung:
ich. Aktivieren Sie Nicht-Administratoren, um an den Port zu binden
netsh http add urlacl url=http://*:44302/ user=Everyone
ii. Firewall durchlassen
netsh advfirewall firewall add rule name="IISExpress visualstudio app" protocol=tcp localport=44302 dir=in action=allow
Abgesehen von der Änderung der iisexpress-Konfigurationsdatei müssen Sie manchmal auch den folgenden Befehl ausführen.
netsh http add urlacl url = http: // *: 49419/user = Everyone
Da ich nicht in der Lage bin, @Garret Fogerlies Beitrag und als Antwort auf die Ausgabe der Kommentatoren (@ Y.Ecarri und @SamuelEdwinWard) einen Kommentar hinzuzufügen, folgte ich den von Garret vorgeschlagenen Anweisungen, indem sie ihn mit Admin Studio 2013 im Admin-Modus ausführte und den Admin-Modus verwendete application.config
datei.
Nachdem ich Debug gestartet hatte und gesehen hatte, dass ich dieselbe Fehlermeldung erhielt, ging ich wieder zu application.config
und sah, dass ein neuer Eintrag für meine Site genau wie bei Y.Ecarri erstellt wurde.
Also hörte ich mit dem Debuggen auf, hielt meine Lösung in Visual Studio geöffnet und bearbeitete die application.config
-Datei erneut für den neuen Eintrag. Ich habe auch einfach *
sings und localhost
komplett entfernt, sodass ich für den neuen Eintrag Folgendes hatte:
<binding protocol="https" bindingInformation=":44300:" />
So vermeiden Sie es, Visual Studio als Administrator auszuführen
Mit Garrets und @shangkeyun's answer können Sie eine Verbindung zur laufenden Website herstellen, ohne dass Sie Visual Studio als Administrator ausführen müssen:
%USERPROFILE%\My Documents\IISExpress\config\applicationhost.config
öffnenname=MySiteName
<binding>
-Eintrag im Abschnitt <bindings>
. Sie sollten jetzt zwei Zeilen mit binding
haben.Es sollte jetzt so aussehen, vorausgesetzt, der Port ist 12345
:
<binding protocol="http" bindingInformation="*:12345:localhost" />
<binding protocol="http" bindingInformation="*:12345:" />
Entfernen Sie alle Firewall-Einschränkungen, indem Sie den folgenden Befehl als Administrator ausführen:
netsh http add urlacl url=http://*:49419/ user=Everyone
Danke an byteit:
Rufen Sie die Datei applicationhost.config in Documents/IISExpress/config auf
finden Sie den Eintrag für die bestimmte Site, an der Sie gerade arbeiten:
hinzufügen:
<binding protocol="http" bindingInformation="*:<your site port>:*" />
vor dem bestehenden
<binding protocol="http" bindingInformation="*:<your site port>:localhost" />
Um die Lösung ohne VS2013 zu erreichen, erstellen Sie beim Neustart einen neuen Website-XML-Eintrag. Sie müssen als Administrator ausgeführt werden.
Hatte das Problem ein sehr ähnliches Problem in Visual Studio Code , beendete ich es durch Hinzufügen von:
"env": {
// ...
"ASPNETCORE_URLS": "http://*:5000" // change to the port you are using
// ...
},
.. bis launch.json
Anscheinend bindet es standardmäßig das http-Protokoll an 'localhost: 5000'. Daher funktioniert es mit localhost, jedoch nicht mit ip-Adresse - weder remote noch lokal.
Wenn Sie versuchen, einen Haltepunkt durch eine Anforderung zu erreichen, die von einem anderen Computer stammt, vergessen Sie nicht, Ihre Firewall-Einstellungen (und/oder Antivirenprogramme) zu überprüfen.
hoffe das hilft
Einige von Ihnen verbringen möglicherweise viel Zeit mit dem Ändern des Verzeichnisses% USERPROFILE%. Wenn Sie mit VS debug arbeiten, verwenden Sie $ (solutionDir) .vs\config\applicationhost.config
Das hat bei mir funktioniert:
C:\VSProjects
).Directory Browsing
aus der Liste der Optionen. Auf der rechten Seite befindet sich eine Enable
-Schaltfläche. Klick es. Jetzt kann ich über mypcname\VSProjects\myProj\outputBinViewer
auf meinen Ordner und meine Projektablage zugreifen.