Herstellen einer Verbindung zum Visual Studio-Debuggen des IIS Express-Servers über das LAN

82

Ich habe eine ASP.NET MVC3-Testanwendung, die in VS2012 entwickelt wurde. Wenn ich mit dem Debuggen beginne, wird vom Host-Computer über die Anfrage an auf die App zugegriffen http://localhost:<portnumber>. Wenn ich jedoch versuche, über den Remotecomputer im Intranet über dieselbe Datei auf dieselbe Anwendung zuzugreifen, kann http://<ip>:<portnumber>ich nicht HTTP error 400: Bad request. Invalid Host Name.auf eine Serverkonfiguration zugreifen , sofern diese unter IIS Express ausgeführt wird.

Gibt es Möglichkeiten, dies zu lösen?

gator88
quelle
Nutzen Sie unsere kostenlose Erweiterung, Förderer , dies zu tun marketplace.visualstudio.com/... es ohne Konfigurationsänderungen funktioniert, schmerzlos.
Jim W sagt, Monica am

Antworten:

138

Aktualisieren

Ich habe ein Video gemacht, das den Prozess besser beschreibt: https://youtu.be/5ZqDuvTqQVs

Wenn Sie Visual Studio 2013 oder höher verwenden, stellen Sie sicher, dass Sie es als Administrator ausführen, damit dies funktioniert.


Öffnen Sie die Datei %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config(möglicherweise in VS2015 $(solutionDir)\.vs\config\applicationhost.config). Im Inneren sollten Sie 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 das bindingInformation=":8080:localhost"in bindingInformation="*:8080:*"(die Portnummer, in meinem Fall 8080, unterscheidet sich.)

Hinweis: Wenn es nicht funktioniert, kann der Versuch mit bindingInformation="*:8080:dem Sternchen entfernt werden.

Stellen Sie dann sicher, dass Ihre Firewall eingehende Verbindungen an diesem Port zulässt. Möglicherweise müssen Sie das System oder zumindest Visual Studio neu starten, damit IISExpress die Konfigurationsdatei neu lädt.

Wenn dies nicht funktioniert, sehen Sie sich diese Antwort an: https://stackoverflow.com/a/5186680/985284

Garrett Fogerlie
quelle
30
Diese Lösung hat bei mir nicht funktioniert. In VS2013 wird nach dem Ändern des Attributs bindingInformation beim Öffnen der IDE und beim Laden des Projekts ein neuer Eintrag erstellt (dh <site name="Website1(1)" id="2" serverAutoStart="true">ich kann immer noch nicht von einem anderen Computer auf die Website zugreifen.
Yván Ecarri
5
Dies funktionierte für mich in VS2013: gilesey.wordpress.com/2013/04/21/…
Jay Cummins
10
Arbeitete für mich. Die Hauptoptimierung bestand darin, Visual Studio als Administrator zu betreiben.
Tanmay Mandal
20
Ich weiß nicht, warum ich anscheinend der einzige mit diesem Problem war, aber es bindingInformation="*:8080:*"hat bei mir nicht funktioniert und zu dem Problem geführt, das @ Y.Ecarri hatte. Was schließlich funktionierte, war das Ablegen der Sternchen : bindingInformation=":8080:". Junge, hat mich das verrückt gemacht, ich hoffe es hilft jemandem.
Drazen Bjelovuk
5
Wie Drazen, musste Admin-Modus + bindingInformation=":8080:"(ohne *)
Matthieu Charbonnier
41

VisualStudio 2015 Nicht-Administrator

  1. .vs\config\applicationHost.configÄndern Sie in Ihrem Lösungsverzeichnis in der Datei die Zeile

    <binding protocol="http" bindingInformation="*:44302:localhost" />

    zu

    <binding protocol="http" bindingInformation=":44302:" />

    (wobei 44302 Ihr Hafen ist)


  1. An einer Admin-Eingabeaufforderung:

    ich. Aktivieren Sie Nicht-Administrator, um an Port zu binden

    netsh http add urlacl url=http://*:44302/ user=Everyone

    ii. Durch Firewall zulassen

    netsh advfirewall firewall add rule name="IISExpress visualstudio app" protocol=tcp localport=44302 dir=in action=allow


  1. Starten Sie das Debuggen in VisualStudio
Gregmac
quelle
Beachten Sie, dass der Ordner .vs unter Windows 10 ausgeblendet ist. Zeigen Sie ausgeblendete Dateien an, um ihn anzuzeigen.
Bhathiya-Perera
Oh! Sie sind mein Held! ENDLICH! Der Schlüssel war die Konfiguration des .vs-Ordners. Ich kann dir nicht genug danken!
Twsmale
Beachten Sie, dass Sie als @ArunPrasadES-Mentiod unten VS als Administrator ausführen, wenn ein Fehler auftritt.
Elmer
@Elmer Das Ausführen Ihrer IDE und das Debuggen Ihrer Programme als Administrator ist im Allgemeinen eine schlechte Idee (mit wenigen Ausnahmen). Am wichtigsten ist, dass Berechtigungsprobleme während der Entwicklung maskiert werden (wenn sie leicht behoben werden können), was schließlich dazu führt, dass Ihr Programm (unnötigerweise) als Administrator ausgeführt werden muss - beispielsweise das Speichern von Dateien an einem Nur-Administrator-Speicherort usw. Es ist besser, nur Beheben Sie das Problem mit Ihren IDE- und / oder Betriebssystem- / Benutzerberechtigungen.
Gregmac
@gregmac Entschuldigen Sie den schlechten Kommentar, dass mein IIS Probleme hatte, wenn ich die Bindungsoptionen geändert und VS nicht als Administrator ausgeführt habe. Einige Prozessfehler-IDs, von denen ich annehme, dass sie mit den Berechtigungen von Windows 10 zusammenhängen, da ich ein brandneues Windows habe 10 Installation mit einer neuen VS 2019-Installation. Im Übrigen stimme ich Ihnen zu 100% zu
Elmer
21

Außer um die iisexpress-Konfigurationsdatei zu ändern, müssen Sie manchmal auch den folgenden Befehl ausführen.

netsh http add urlacl url = http: // *: 49419 / user = Jeder

shangkeyun
quelle
Was nützt der 49419-Port? Ist das nur ein Beispielport, der genauso gut 8080 sein könnte?
Oligofren
Beantwortung meiner eigenen Frage: Ja, es ist der Port, auf dem die App ausgeführt wird. Wenn Sie diese Antwort verwenden, müssen Sie Visual STudio nicht mehr als Administrator ausführen.
Oligofren
1
Können Sie bitte eine kurze Erklärung geben, wie es funktioniert?
Shishir Gupta
12

So vermeiden Sie das Ausführen von Visual Studio als Administrator

Mit der Antwort von Garret und @ shangkeyun können Sie eine Verbindung zur laufenden Website herstellen, ohne Visual Studio als Administrator ausführen zu müssen:

  1. Öffnen %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config
  2. Suchen Sie mit nach Ihrer Website name=MySiteName
  3. Duplizieren Sie das vorhandene <binding>Element im <bindings>Abschnitt. Sie sollten jetzt zwei Zeilen mit haben binding.
  4. Entfernen Sie den Teil "localhost" in bindingInformation.
  5. Es sollte jetzt so aussehen, vorausgesetzt der Port ist 12345:

    <binding protocol="http" bindingInformation="*:12345:localhost" />
    <binding protocol="http" bindingInformation="*:12345:" />
    
  6. Aktivieren Sie Nicht-Administrator, um an Port zu binden

    netsh http add urlacl url=http://*:12345/ user=Everyone

EDIT 2019: gregmac hat einen Schritt hinzugefügt, um die VS-Instanz auf die Whitelist zu setzen. Ich habe das nie gebraucht, aber trotzdem aufgelistet:

  1. netsh advfirewall firewall add rule name="IISExpress visualstudio app" protocol=tcp localport=12345 dir=in action=allow
Oligofren
quelle
6
Durch Hinzufügen des Netsh wurde der Fehler in "Service nicht verfügbar"
geändert
@tofutim gleich hier. Hast du eine Lösung gefunden?
frostymarvelous
Haben Sie Visual Studio anschließend neu gestartet?
Oligofren
Hallo, ich habe gerade bemerkt, dass der Befehl netsh in Kombination mit den vorhergehenden Zeilen falsch war. Ich habe 12345 als obigen Port verwendet, aber 49419 als Beispielport im Befehl netsh verwendet. Dies wurde in meinem Update behoben.
Oligofren
10

Da ich @Garret Fogerlies Beitrag und als Antwort auf das Problem der Kommentatoren (@ Y.Ecarri und @SamuelEdwinWard) keinen Kommentar hinzufügen kann, habe ich die Vorschläge von Garret befolgt, Visual Studio 2013 verwendet, ihn im Admin-Modus ausgeführt und das geändert application.configDatei.

Nachdem ich das Debug gestartet und festgestellt hatte, dass ich dieselbe Fehlermeldung erhalten hatte, ging ich zurück application.configund stellte fest, dass ein neuer Eintrag für meine Site erstellt wurde, genau wie das Problem von Y.Ecarri.

Also habe ich das Debuggen beendet, meine Lösung in Visual Studio geöffnet und die application.configDatei für den neuen Eintrag erneut bearbeitet . Ich habe auch einfach die *Sings entfernt und localhostkomplett, so dass ich für den neuen Eintrag folgendes hatte:

<binding protocol="https" bindingInformation=":44300:" />

hvaughan3
quelle
Dies ist die einzige Lösung, die geholfen hat! Vielen Dank.
Code5
2

Einige von Ihnen verbringen möglicherweise viel Zeit mit dem Ändern und Testen in Ihrem% USERPROFILE% -Verzeichnis. Wenn Sie ein VS-Debug ausführen, verwenden Sie $ (solutionDir) .vs \ config \ applicationhost.config

carlo818
quelle
1

Dank byteit:

Wechseln Sie zu applicationhost.config in Documents / IISExpress / config

Suchen Sie den Eintrag für die Site, an der Sie 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 XML-Eintrag für die Website. Sie müssen als Administrator ausgeführt werden.

Isaac Bolinger
quelle
1

Nach den obigen Konfigurationen musste ich Visual Studio im Verwaltungsmodus ausführen.

Geben Sie hier die Bildbeschreibung ein

Arun Prasad ES
quelle
0

Das hat bei mir funktioniert:

  • Starten Sie den IIS-Manager
  • Fügen Sie ein neues virtuelles Verzeichnis hinzu, das auf den Projektordner verweist ( C:\VSProjectsin meinem Fall).
  • Wählen Sie das neue virtuelle Verzeichnis im IIS-Manager aus. Wählen Sie Directory Browsingaus der Liste der Optionen. Auf der rechten Seite befindet sich ein EnableKnopf. Klick es.

Jetzt kann ich über auf meinen Ordner und Projektkorb im Netzwerk zugreifen mypcname\VSProjects\myProj\outputBinViewer.

SaiyanGirl
quelle
0

Hatte das Debuggen eines sehr ähnlichen Problems in Visual Studio Code , löste ich es durch Hinzufügen von:

"env": {
      // ...
      "ASPNETCORE_URLS": "http://*:5000" // change to the port you are using
      // ...
},

.. zu starten.json

Anscheinend bindet es das http-Protokoll standardmäßig an 'localhost: 5000', sodass es mit localhost funktioniert, jedoch nicht mit der IP-Adresse - weder remote noch lokal.

Wenn Sie versuchen, einen Haltepunkt durch eine Anforderung von einem anderen Computer zu erreichen, vergessen Sie nicht, Ihre Firewall-Einstellungen (und / oder Antivirenprogramme) zu überprüfen.

hoffe das hilft

Carlos R Balebona
quelle