IISExpress gibt einen 503-Fehler von Remotecomputern zurück

183

Ich versuche, eine Website, die ich in einer lokalen IISExpress-Instanz ausgeführt habe, mit einigen anderen Computern / Geräten in meinem lokalen Netzwerk zu testen. Ich verwende Win7 Pro.

Wenn ich zum ersten Mal versuche, von einem anderen Computer in meinem lokalen Netzwerksegment zu meinem Computer zu navigieren, wird die Fehlermeldung 400 angezeigt: Hostname ist ungültig.

Ich verstehe, dass ich Remotezugriff auf die ACL mit einem Befehl an der Eingabeaufforderung mit erhöhten Rechten gewähren muss, wie:

netsh http add urlacl url=http://mymachinename:50333/ user=everyone

Jetzt bekomme ich einen 503 Service ist nicht verfügbar Fehler.

Die Windows-Firewall ist derzeit ausgeschaltet und ich kann meine lokale IISExpress-Instanz mit der Adresse durchsuchen http://localhost:50333

Was ist das letzte Stück dieses Konfigurationspuzzles?

Jeff Fritz
quelle
1
Was passiert, wenn Sie http://mymachinename:50333/ von Ihrem Computer aus zu navigieren ?
Colonel Panic
1
Das Problem wurde gelöst. Siehe die akzeptierte Antwort von vikomall
Jeff Fritz
1
Eine ausführlichere
Chris Moschini
3
Sie können unsere kostenlose VS - Erweiterung ‚Conveyor‘ zu erhalten , um dieses Problem installieren marketplace.visualstudio.com/...
Jim W sagt wieder einzusetzen Monica

Antworten:

270

Anscheinend fehlt Ihnen ein verbindlicher Informationseintrag in der Datei applicationhost.config.

  1. Öffnen Sie Ihre Datei applicationhost.config. Mögliche Standorte sind:

    • %userprofile%\Documents\IISExpress\config\applicationhost.config
    • $(solutionDir)\.vs\config\applicationhost.config (VS2015)
    • Andernfalls überprüfen Sie die Ausgabe von iisexpress.exe, um sicherzugehen.
  2. Suchen Sie Ihren WebSite-Eintrag und fügen Sie die folgende Bindung mit Ihrem Computernamen hinzu.

         <binding protocol="http" bindingInformation=":50333:your-machine-name" />
    
  3. Starten Sie IIS Express neu

vikomall
quelle
9
Keine Ursache. Visual Studio hat einen doppelten Konfigurationseintrag für das Element erstellt. Ich habe es entfernt und es hat funktioniert.
Nuzzolilo
3
IIS Express verwendet nicht immer die Konfigurationsdatei unter diesem Pfad. Lesen Sie die Ausgabe iisexpress.exesorgfältig durch, um festzustellen, welche Konfigurationsdatei verwendet wird.
Colonel Panic
5
Wichtiger Punkt 3: Starten Sie IIS Express neu! Suchen Sie das Symbol in Ihrer Taskleiste und stoppen Sie es, um einen Neustart zu erzwingen. Ich bin mir nicht sicher, ob es einen eleganteren Weg gibt. Aber das hat bei mir funktioniert. Vielen Dank!
Der Senator
9
Wenn Sie zu faul sind, um jede Kombination aus Hostname und IP-Adresse hinzuzufügen, verwenden Sie ein * anstelle von "Ihr Computername"
StarQuake
4
Noch ein Hinweis: Wenn Sie mit der rechten Maustaste auf das Systray-Symbol von IISExpress klicken, können Sie "Alle Anwendungen anzeigen" auswählen. Daraufhin wird ein Dialogfeld mit allen Anwendungen geöffnet, die Sie derzeit lokal ausführen. Klicken Sie mit der rechten Maustaste auf die gewünschte Anwendung (klicken Sie nicht mit der linken Maustaste, da sonst der Browser geöffnet wird). Anschließend werden unten "Pfad" und "Konfiguration" angezeigt. Klicken Sie mit der linken Maustaste auf "Config" und es wird die zugehörige Datei "Applicationhost.config" geöffnet, in der Sie die Bindungen wie oben beschrieben hinzufügen / bearbeiten müssen. Dies ist eine einfache Möglichkeit, die aktuelle Konfiguration zu finden.
Matt
30

Es gab nur eine Sache, die für mich funktioniert hat.

Verwenden *:portnumber:*war nicht gut. Ja, nachdem ich das getan und sichergestellt habe, dass die Windows-Firewall geöffnet ist, konnte ich eine Verbindung zum Port herstellen, aber es wurde immer noch der Fehler "503" angezeigt.

Ich habe einige Dinge lokal getestet und festgestellt, dass nur http: // localhost funktioniert. Bei Verwendung der realen IP-Adresse (nicht 127.0.0.1, sondern beispielsweise 192.168.1.50) wurde auch auf dem lokalen Computer eine 503 zurückgegeben. Ich habe versucht, den echten Hostnamen in den Bindungen zu verwenden, aber IIS Express hat den Start verweigert. Dies hat möglicherweise etwas damit zu tun, wie der Hostname aufgelöst wurde. Das habe ich nicht weiter untersucht.

Schließlich habe ich diese Konfiguration verwendet:

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

Auf diese Weise konnte ich eine Verbindung von einem Remote-Computer mit herstellen http://192.168.1.50:53351.

Die Eidechse
quelle
Ich habe genau diesen Fehler festgestellt, wollte aber die aktuelle IP nicht fest in die Konfiguration codieren, da sie sich ändern kann. Ich fand, dass der Platzhalter für die IP- und Hostnamen-Teile funktioniert, und endete mit: <binding protocol="https" bindingInformation="*:44300:*" /> <binding protocol="http" bindingInformation="*:8888:*" /> edit: Ich habe wirklich versucht, SO Markdown zu verstehen, ich habe aufgehört :).
Brian Barker
19

Nachdem ich mehr als 3 Stunden mit einem so vollständigen Thema verschwendet hatte, beschloss ich, mein Setup mit Ihnen zu teilen. Meine Konfiguration ist Visual Express 2012 für Web Update 4 unter Windows 8. Dies war meine erste Rückkehr zu MS VS seit dem Studium (mindestens 8 Jahre) und jetzt bin ich sicher, dass Linux-Regeln gelten. Auf Django brauchte ich 10 Minuten, um die Dokumentation zu durchsuchen.

  1. Schalten Sie die Firewall zum Testen aus

    netsh advfirewall set allprofiles state off
    
  2. Setup-Bindungen in meinem Fall lautet localIP = 192.168.1.102 (da Links keine nicht numerische Domäne enthalten können, verwenden Sie sie unten anstelle von mylocaldomain.com, siehe Stackoverflow-Richtlinie) in Documents\IISExpress\config\applicationhost.config

    <bindings>
        <binding protocol="http" bindingInformation="*:53351:mylocaldomain.com" />
        <binding protocol="http" bindingInformation="*:53351:localhost" />
    </bindings>
    
  3. Autorun für ISS Express-Startdienst automatisch hinzufügen

    <site name="NeuronCharts" id="2" serverAutoStart="true">
    
  4. Fügen Sie dem http-Server einige seltsame Regeln hinzu (ich weiß immer noch nicht, ob dies nesseary ist)

    netsh http add urlacl url=http://mylocaldomain.com:53351/ user=everyone
    
  5. Führen Sie IISExpress manuell aus, nicht über VS IDE

  6. Sie werden sehen, dass ISSExpress Bindungen registriert
  7. http://mylocaldomain.com:53351 Wenn der Browser funktioniert, können wir eine Firewall-Regel hinzufügen
  8. Firewall-Regel hinzufügen

    netsh advfirewall firewall add rule name="IISExpressWeb" dir=in protocol=tcp localport=53351 remoteip=any action=allow
    

Setzen Sie remoteip auf any, wenn Sie von außerhalb auf Ihren Server zugreifen möchten, wenn Sie für das lokale Netzwerk auf localubnet zugreifen möchten

  1. Firewall starten

    netsh advfirewall set allprofiles state on
    
  2. Überprüfen Sie erneut, ob auf der lokalen und öffentlichen IP-Adresse alles funktioniert

Wünsch dir Glück

Rafal

Rafal
quelle
3
Dies führte dazu, dass IIS Express unter Win8 mit VS2013 nicht mehr ausgeführt wurde, ohne VS2013 als Administrator auszuführen. Dies wird dadurch verursacht, dass IIS Express aufgrund des Befehls netsh jetzt versucht, sich für externen Datenverkehr zu öffnen. Ich war auch nie in der Lage, es tatsächlich dazu zu bringen, diesen Verkehr zu bedienen; Ich würde eine 503 erhalten. Um das durch den Befehl netsh in dieser Antwort verursachte Problem umzukehren, führen Sie dies über eine Eingabeaufforderung aus, die als Administrator ausgeführt wird: netsh http delete urlacl url=http://*:55416/(Port durch Ihren Port ersetzen)
Chris Moschini
fwiw - Ich brauche Schritt 4 nicht (der Netsh-Aufruf, dass @Rafal nicht sicher ist, ist notwendig) und, obwohl ich die "localhost" -Bindung in Schritt 2 nicht benötige, um die VS2013-Projekte in meiner Lösung auszuführen, die Vorderseite Das Ende wird erheblich schneller geladen, wenn diese "localhost" -Bindung an Ort und Stelle verbleibt.
Lukkea
Ich fand, dass das Befolgen der obigen Anweisungen immer noch zu 503 führte localhost. Ich fand , dass der Gast (Windows) Computername in den Bindungen sein mußte in applicationhost.configund auf dem Host (Mac) auf den Computernamen Gast benötigt , um abgebildet werden 127.0.0.1in /etc/hosts. Erst dann war eine Anforderung an den Gastcomputer auf dem Host erfolgreich.
Matt
Eine Ergänzung zu Schritt 5. Verwenden Sie iisexpress.exe / siteid: id, wobei id der Wert des ID-Attributs Ihrer Site in der Einstellung <site id = "id"> ist. Andernfalls wird die erste Site gestartet.
Mudit Jain
9

Ich habe festgestellt, dass das Problem mit einer schlechten URL-Zuordnung zu tun hat. Um dies herauszufinden:

netsh http show urlacl 

und suchen Sie nach Dingen wie http://+:80/oder dem Port, an den Sie binden.

Dann benutze

netsh http delete url=<the url from the list>

Dies hat das Problem für mich behoben.

Anthony Rizzolo
quelle
4
sollte netsh http sein delete urlacl url = <die url aus der liste>, das hat bei mir funktioniert danke!
Sergiogx
1
Dies wird im msdn-Blog ausführlicher besprochen . Dies war letztendlich auch mein Problem.
Kevin Scharnhorst
3
Danke, die genaue Syntax istnetsh http delete urlacl <yoururl>
yoel halb
7

Bei mir hat nichts funktioniert. Endlich habe ich iisexpress-proxy gefunden

Siehe meine Antwort https://stackoverflow.com/a/33623399/631527

Eine andere Lösung ist ngrok

Toolkit
quelle
Tolle! Ich habe all diese anderen Lösungen ausprobiert und sie haben auch nicht funktioniert. "Ungültige Anfrage" oder "Service nicht verfügbar". Zu kompliziert. Ich habe das Knotenmodul installiert und ausgeführt, es funktioniert sofort !!
TetraDev
ARBEITET! heilig! Danke dir!
Ayson Baxter
check out ngrok also auch
Toolkit
1
Es funktioniert einfach wie ein Zauber mit ngrok! Es ist seltsam, zuerst von localhost zu iis-proxy und dann von proxy zu ngrok routen zu müssen, aber hey, hat funktioniert!. Zum Beispiel habe ich meinen iisexpress am Port 3028. Ich rannte iisexpress-proxy 3028 to 12345und dann ./ngrok.exe http 12345. 😅
Reuel Ribeiro
@ TetraDev, die "Bad Request" oder "Service nicht verfügbar" war, weil der Host-Header, der beim Zugriff auf localhost von ngrok empfangen wurde, kein localhost war, wie hier
Dani Torres
3

Was mir geholfen hat, war das Klicken mit der rechten Maustaste auf das IISExpress-Symbol "Alle Anwendungen anzeigen". Dann wählte ich die Website aus und sah, welche aplicationhost.config verwendet wird, und die Korrektur verlief perfekt.

IISExpress-Konfiguration

Emmanuel
quelle
1

Das Problem besteht darin, die Datei applicationhost.config im Webordner anstelle der Datei der Lösung zu aktualisieren. Die Lösungskonfigurationsdatei muss geändert werden

Victor Arce
quelle
1

Vergessen Sie nach der Lösung von @vikomall nicht, VS als Administrator zu starten. Das behebt es für mich.

Rapido
quelle
0

In Bezug auf Anthony Rizzolos Antwort: In Windows 8.1 musste ich Folgendes eingeben:

netsh http delete urlacl url=<the url from the list>

Beispielsweise:

netsh http delete urlacl url=http://+:8689/
Elrinth
quelle
0

Keine der obigen Antworten hat bei mir funktioniert.

Ich habe zwei Einträge in netsh für den gleichen Dienst gehabt

netsh http show urlacl

Geben Sie hier die Bildbeschreibung ein

Einer verwendet einen starken Platzhalter, der andere einen schwachen Platzhalter.

Das Entfernen desjenigen mit dem schwachen Platzhalter hat den Job gemacht.

Mehr über die starke und schwache Wildcard im Kontext von Netsh

Wenn das Host-Element eines UrlPrefix aus einem einzelnen Pluszeichen (+) besteht, stimmt das UrlPrefix mit allen möglichen Hostnamen im Kontext seiner Schema-, Port- und relativenURI-Elemente überein und fällt in die Kategorie der starken Platzhalter.

Wenn ein Sternchen (*) als Hostelement angezeigt wird, fällt das UrlPrefix in die schwache Platzhalterkategorie. Diese Art von UrlPrefix entspricht jedem Hostnamen, der dem angegebenen Schema, Port und relativeURI zugeordnet ist und noch nicht mit einem UrlPrefix mit starkem Platzhalter, explizitem oder IP-gebundenem schwachem Platzhalter abgeglichen wurde. Diese Hostspezifikation kann unter bestimmten Umständen als Standard-Catch-All verwendet werden oder um einen großen Abschnitt des URL-Namespace anzugeben, ohne dass viele UrlPrefixe verwendet werden müssen.

https://docs.microsoft.com/en-gb/windows/desktop/Http/urlprefix-strings

Matcheek
quelle