it-swarm.com.de

Verwenden benutzerdefinierter Domänen mit IIS Express

Normalerweise verwende ich benutzerdefinierte Domänen mit meinem localhost-Entwicklungsserver. Etwas in der Art von:

dev.example.com
dev.api.example.com

Dies hat mir eine Menge Flexibilität bei der Arbeit mit externen APIs wie Facebook verschafft. Dies hat in der Vergangenheit mit dem integrierten Visual Studio Development Server hervorragend funktioniert, da ich nur einen CNAME zu den DNS-Einträgen hinzufügen musste, die auf 127.0.0.1 Zeigen.

Es ist mir jedoch nicht gelungen, dies zum Funktionieren mit IIS Express. Alles, was ich versucht habe, scheint fehlgeschlagen zu sein. Ich habe sogar die richtige XML-Konfiguration zur Datei applicationHost.config Hinzugefügt für IIS Express, aber es scheint nicht zu erkennen, dass die Einträge so gültig sind wie eine echte Installation von IIS).

<binding protocol="http" bindingInformation="*:1288:dev.example.com" />

Immer wenn ich diese Zeile eingebe und versuche, http://dev.example.com:1288 Anzufordern, erhalte ich die folgende Meldung:

Falsche Anfrage (ungültiger Hostname

Weiß jemand, ob mir etwas Offensichtliches fehlt? Oder hat das IIS Express-Team wirklich nicht die Voraussicht gehabt, diese Art der Nutzung zu sehen?

292
Nick Berardi

Dies hat bei mir funktioniert (Aktualisiert für VS 2013, siehe Versionsverlauf für 2010, für VS 2015 siehe dies: https: // stackoverflow.com/a/32744234/218971 ):

  1. Klicken Sie mit der rechten Maustaste auf Ihr Webanwendungsprojekt ▶ PropertiesWeb, und konfigurieren Sie den Abschnitt Servers wie folgt:
    • Wählen IIS Express ▼ aus dem Dropdown
    • Projekt-URL: http://localhost
    • Anwendungsstamm-URL überschreiben: http://dev.example.com
    • Klicken Create Virtual Directory (Wenn Sie hier eine Fehlermeldung erhalten, müssen Sie möglicherweise IIS 5/6/7/8, ändern Sie IIS Default Site in etwas anderes als port :80, make sicher Skype verwendet nicht Port 8 usw.)
  2. Optional: Setzen Sie Start URL Auf http://dev.example.com
  3. Öffnen Sie %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config (Windows XP, Vista und 7) und bearbeiten Sie die Site-Definition im Konfigurationsblock <sites> Wie folgt:

    <site name="DevExample" id="997005936">
        <application path="/" applicationPool="Clr2IntegratedAppPool">
            <virtualDirectory
                path="/"
                physicalPath="C:\path\to\application\root" />
        </application>
        <bindings>
            <binding
                protocol="http"
                bindingInformation=":80:dev.example.com" />
        </bindings>
        <applicationDefaults applicationPool="Clr2IntegratedAppPool" />
    </site>
    
  4. Wenn Sie MVC ausführen: Stellen Sie sicher, dass applicationPool auf eine der "Integrated" -Optionen gesetzt ist (wie "Clr2IntegratedAppPool").

  5. Öffnen Sie Ihre hosts Datei und fügen Sie die Zeile 127.0.0.1 dev.example.com Hinzu.
  6. ► Start Ihre Bewerbung!

Einige gute Ratschläge aus den Kommentaren:

  • Möglicherweise müssen Sie Visual Studio als Administrator ausführen.
  • Wenn Sie andere Entwickler dazu bringen möchten, sehen Sie, wie Sie IIS ausführen netsh http add urlacl url=http://dev.example.com:80/ user=everyone
  • Wenn die Site für alle Hosts aufgelöst werden soll, setzen Sie bindingInformation="*:80:". Verwenden Sie einen beliebigen Port, 80 ist einfach praktisch.
355
David Murdoch

Für Visual Studio 2015 gelten die Schritte in den obigen Antworten, aber die applicationhost.config Datei befindet sich an einem neuen Ort. Befolgen Sie in Ihrem "solution" -Ordner den Pfad. Dies ist verwirrend, wenn Sie ein Upgrade durchgeführt haben und ZWEI Versionen von applicationhost.config auf Ihrem Computer.

\.vs\config

In diesem Ordner sehen Sie Ihre applicationhost.config -Datei

Alternativ können Sie Ihren Lösungsordner auch nach der .config-Datei durchsuchen und auf diese Weise ermitteln.

Ich persönlich habe folgende Konfiguration verwendet:

enter image description here

Mit den folgenden in meiner Hosts-Datei:

127.0.0.1       jam.net
127.0.0.1       www.jam.net

Und das Folgende in meiner applicationhost.config-Datei:

<site name="JBN.Site" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\Dev\Jam\shoppingcart\src\Web\JBN.Site" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:49707:" />
            <binding protocol="http" bindingInformation="*:49707:localhost" /> 
    </bindings>
</site>

Denken Sie daran, Ihre Instanz von Visual Studio 2015 als Administrator auszuführen! Wenn Sie dies nicht jedes Mal tun möchten, wenn ich dies empfehle:

Wie wird Visual Studio standardmäßig als Administrator ausgeführt?

Ich hoffe, das hilft jemandem. Ich hatte Probleme beim Upgrade auf Visual Studio 2015 und stellte fest, dass keine meiner Konfigurationen übertragen wurden.

144
njfife

Wenn Sie Visual Studio 2012 mit IIS Express, ändern , funktioniert eine vorhandene Bindung nicht dauerhaft. (Möglicherweise funktioniert dies bis Sie schließen VS, aber danach werden die Dinge wirklich durcheinander gebracht.)

Der Schlüssel besteht darin, die vorhandene localhost-Bindung beizubehalten und danach eine neue Bindung hinzuzufügen .

Sofern Sie nicht als Administrator angemeldet sind, müssen Sie auch netsh add urlacl (um sich selbst die Berechtigung zu geben, eine nicht-lokale Host-Site als Standardbenutzer auszuführen).

Wenn Sie einen beliebigen Hostnamen zulassen möchten, ist der gesamte Vorgang wie folgt:

  1. Erstellen Sie Ihre Webanwendung und ermitteln Sie, welchen Port sie verwendet (siehe Projekteigenschaften, Registerkarte "Web", Projekt-URL).
  2. Führen Sie an einer Administrator-Eingabeaufforderung die folgenden Befehle aus (ersetzen Sie portnumber durch die Portnummer, die Sie in Nummer 1 ermittelt haben):

    netsh http add urlacl url="http://*:portnumber/" user=everyone
    netsh http add urlacl url="http://localhost:portnumber/" user=everyone
    

Sie können auch Ihren Benutzernamen (DOMAIN\USER) anstelle von "everyone" verwenden, um die Sicherheit zu verbessern.

  1. Öffnen Sie die Datei applicationhost.config (normalerweise unter Eigene Dateien\IIS Express\config) und suchen Sie das Element mit Ihrer Portnummer.
  2. Fügen Sie eine weitere Bindung mit dem gewünschten Hostnamen hinzu (in diesem Fall *). Zum Beispiel:

    <site name="MvcApplication1" id="2">
        <application path="/" applicationPool="Clr4IntegratedAppPool">
            <virtualDirectory path="/" physicalPath="C:\sites\MvcApplication1" />
        </application>
        <bindings>
            <binding protocol="http" bindingInformation="*:12853:localhost" />
            <binding protocol="http" bindingInformation="*:12853:*" />
        </bindings>
    </site>
    

Beachten Sie, dass Sie zum Öffnen aller Hostnamen (*) zwei netsh-Befehle benötigen (einen für * und einen für localhost). Wenn Sie nur einen bestimmten Hostnamen öffnen möchten, benötigen Sie den zweiten netsh-Befehl (localhost) nicht unbedingt. es genügt nur der mit Ihrem spezifischen Hostnamen.

44
dmatson

Der ungültige Hostname zeigt an, dass die tatsächliche Site, die Sie in der Express-Konfigurationsdatei IIS konfiguriert haben, (höchstwahrscheinlich) nicht ausgeführt wird. IIS Express verfügt nicht über ein Prozessmodell wie IIS.


Damit Ihre Site ausgeführt werden kann, muss sie explizit gestartet werden (entweder durch Öffnen und Zugreifen über webmatrix oder über die Befehlszeile, die iisexpress.exe (aus dem Installationsverzeichnis) mit dem Parameter/site aufruft).


Im Allgemeinen werden die folgenden Schritte ausgeführt, um die Verwendung vollqualifizierter DNS-Namen für den lokalen Zugriff zuzulassen: Nehmen wir das Beispiel des DNS-Namens dev.example.com

  1. bearbeiten Sie die Datei% windows%\system32\drivers\etc\hosts, um dev.example.com 127.0.0.1 zuzuordnen (Administratorrechte erforderlich). Wenn Sie den DNS-Server steuern (wie in Nicks Fall), ist der DNS-Eintrag ausreichend, da dieser Schritt nicht erforderlich ist.
  2. Wenn Sie über Proxy auf das Internet zugreifen, stellen Sie sicher, dass dev.example.com nicht an Proxy weitergeleitet wird (Sie müssen dies in die Ausnahmeliste Ihres Browsers eintragen (für IE wäre dies Extras/Internetoptionen/Verbindungen)/Lan-Einstellungen, gehen Sie zu Proxy Server/Advanced und fügen Sie dev.example.com in die Ausnahmeliste ein.
  3. Konfigurieren Sie die Express-Bindung IIS für Ihre Site (z. B. Site1), um dev.example.com einzuschließen. Für die Verwendung der Bindung sind Administratorrechte erforderlich. Alternativ kann mit http.sys eine einmalige URL-Reservierung vorgenommen werden

    netsh http add urlacl url=http://dev.example.com:<port>/ user=<user_name>

  4. starten Sie iisexpress /site:Site1 oder öffnen Sie Site1 in WebMatrix

24
Jaro Dunajsky

Auf meiner WebMatrix IIS Express Installation von "*:80:localhost" bis "*:80:custom.hostname" hat nicht funktioniert ("Bad Hostname", auch mit richtigen etc\hosts-Zuordnungen), aber "*:80:"hat funktioniert - und dies ohne die zusätzlichen Schritte, die für die anderen Antworten hier erforderlich sind. Beachten Sie, dass "*:80:*" wird es nicht tun; lassen Sie das zweite Sternchen weg.

19
rymo

Ich habe versucht, die öffentliche IP-Adresse in meinen Workflow zu integrieren, und diese Antworten haben nicht geholfen (ich verwende gerne die IDE als IDE). Aber die oben genannten führen mich zur Lösung (nachher) Ungefähr 2 Stunden lang habe ich meinen Kopf gegen eine Wand geschlagen, um dies in Visual Studio 2012/Windows 8 zu integrieren.

applicationhost.config generiert von VisualStudio unter C:\Users\usr\Documents\IISExpress\config

    <site name="MySite" id="1">
        <application path="/" applicationPool="Clr4IntegratedAppPool">
            <virtualDirectory path="/" physicalPath="C:\Users\usr\Documents\Visual Studio 2012\Projects\MySite" />
        </application>
        <bindings>
            <binding protocol="http" bindingInformation="*:8081:localhost" />
            <binding protocol="http" bindingInformation="*:8082:localhost" />
            <binding protocol="http" bindingInformation="*:8083:192.168.2.102" />
        </bindings>
    </site>
  • Stellen Sie IISExpress so ein, dass es als Administrator ausgeführt wird, damit es an externe Adressen (nicht an den lokalen Host) gebunden werden kann.
  • Führen Sie Visual Stuio als Administrator aus, damit der Prozess als Administrator gestartet werden kann und die Bindung stattfinden kann.

Das Nettoergebnis ist, dass Sie in meinem Fall nach 192.168.2.102 Suchen und testen können (zum Beispiel in einem Android Emulator. Ich hoffe wirklich, dass dies jemand anderem hilft, da dies definitiv ein irritierender Prozess war für mich.

Anscheinend ist es eine Sicherheitsfunktion, die ich gerne deaktiviert sehen würde.

8

Wie Jessa Flint oben wollte ich . Vs\config\applicationhost.config nicht manuell bearbeiten, da die Änderungen in der Quellcodeverwaltung beibehalten werden sollen. Ich wollte auch keine separate Batch-Datei haben. Ich benutze VS 2015 .

Projekteigenschaften → Buildereignisse → Befehlszeile für das vorab erstellte Ereignis: Screenshot of project properties


::The following configures IIS Express to bind to any address at the specified port

::remove binding if it already exists
"%programfiles%\IIS Express\appcmd.exe" set site "MySolution.Web" /-bindings.[protocol='http',bindingInformation='*:1167:'] /apphostconfig:"$(SolutionDir).vs\config\applicationhost.config"

::add the binding
"%programfiles%\IIS Express\appcmd.exe" set site "MySolution.Web" /+bindings.[protocol='http',bindingInformation='*:1167:'] /apphostconfig:"$(SolutionDir).vs\config\applicationhost.config"

Stellen Sie einfach sicher, dass Sie die Portnummer in den gewünschten Port ändern.

5
Jon

Die hochgestimmte Antwort ist gültig. Diese Information hat mir sehr geholfen. Ich weiß, dass dieses Thema bereits besprochen wurde, aber ich wollte einige zusätzliche Eingaben hinzufügen. Die Leute sagen, dass Sie die Datei application.config im Verzeichnis Users IISExpress/Config "manuell bearbeiten" müssen. Dies war ein großes Problem für mich, da ich die Konfiguration über die Quellcodeverwaltung an verschiedene Entwickler verteilen wollte.

Ich habe festgestellt, dass Sie die Aktualisierung dieser Datei mithilfe des Programms "C:\Programme\IIS Express\appcmd.exe" automatisieren können. Es dauerte eine Weile, bis ich die Kontrollparameter herausgefunden hatte, aber ich werde meine Erkenntnisse hier mitteilen. Grundsätzlich können Sie eine .bat-Datei erstellen, die sowohl den NETSH-Befehl als auch die Datei APPCMD.EXE ausführt (und ggf. eine Host-Datei austauscht), um die Konfiguration des Host-Headers mit IIS Express) zu vereinfachen.

Ihre install bat-Datei würde ungefähr so ​​aussehen:

netsh http add urlacl url=http://yourcustomdomain.com:80/ user=everyone 

"C:\Program Files\IIS Express\appcmd.exe" set site "MyApp.Web" /+bindings.[protocol='http',bindingInformation='*:80:yourcustomdomain.com']

Ich werde auch eine "Uninstall" -Bat-Datei erstellen, die diese Bindungen bereinigt.

netsh http delete urlacl url=http://yourcustomdomain.com:80/

"C:\Program Files\IIS Express\appcmd.exe" set site "MyApp.Web" /-bindings.[protocol='http',bindingInformation='*:80:yourcustomdomain.com']

Ich hoffe, diese Informationen sind für jemanden hilfreich. Ich habe ein wenig gebraucht, um sie aufzudecken.

5
Jesse Flint

Jaros Rat folgend, konnte ich dies mit einer kleinen Modifikation unter Windows XP und IIS Express (über Web Matrix installiert)) zum Laufen bringen und war nicht darauf beschränkt Es ist nur eine Frage der richtigen Einstellung der Bindungen.

  1. Verwenden Sie WebMatrix, um eine neue Site aus einem Ordner in Ihrem Webanwendungsstamm zu erstellen.
  2. Schließen Sie WebMatrix.
  3. Öffne %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config (Windows XP. Vista und 7 Pfade werden ähnlich sein) und bearbeiten Sie die Site-Definition in der <sites> config block so wie folgt:

    <site name="DevExample" id="997005936">
        <application path="/" applicationPool="Clr2IntegratedAppPool">
            <virtualDirectory
                path="/"
                physicalPath="C:\path\to\application\root" />
        </application>
        <bindings>
            <binding
                protocol="http"
                bindingInformation="*:80:dev.example.com" />
        </bindings>
        <applicationDefaults applicationPool="Clr2IntegratedAppPool" />
    </site>

Wenn Sie MVC ausführen, belassen Sie den applicationPool auf einer der "Integrated" -Optionen.

4
Neil Monroe

Davids Lösung ist gut. Aber ich habe festgestellt, dass die <script>alert(document.domain);</script> auf der Seite immer noch "localhost" warnt, da die Projekt-URL immer noch localhost ist, auch wenn sie mit http://dev.example.com Überschrieben wurde. Ein weiteres Problem, das mir auffällt, ist, dass ich benachrichtigt werde, dass Port 80 bereits verwendet wurde, auch wenn ich Skype mithilfe der von David Murdoch empfohlenen Portnummer 80 deaktiviert habe. Also habe ich eine andere Lösung gefunden, die viel einfacher ist:

  1. Führen Sie Notepad als Administrator aus, öffnen Sie das Verzeichnis C:\Windows\System32\drivers\etc\hosts, fügen Sie die Mydomain 127.0.0.1 hinzu, und speichern Sie die Datei.
  2. Öffnen Sie das Webprojekt mit Visual Studio 2013 (Hinweis: muss auch als Administrator ausgeführt werden), klicken Sie mit der rechten Maustaste auf das Projekt -> Eigenschaften -> Web (nehmen wir an, die Projekt-URL unter der Option "IIS Express" lautet http://localhost:33333/ ), ändern Sie es dann von http://localhost:33333/ in http://mydomain:333333/. Hinweis: Nach dieser Änderung sollten Sie weder auf die Schaltfläche "Virtuelles Verzeichnis erstellen" rechts neben dem Feld "Projekt-URL" noch auf die Schaltfläche "Speichern" von klicken das Visual Studio, da sie nicht erfolgreich sein werden. Sie können Ihre Einstellungen nach dem nächsten Schritt 3 speichern.
  3. Öffnen Sie% USERPROFILE%\Eigene Dateien\IISExpress\config\applicationhost.config, suchen Sie nach "33333: localhost", aktualisieren Sie es auf "33333: mydomain" und speichern Sie die Datei.
  4. Speichern Sie Ihre Einstellung wie in Schritt 2 beschrieben.
  5. Klicken Sie mit der rechten Maustaste auf eine Webseite in Ihrem Visual Studio und klicken Sie auf "Im Browser anzeigen". Jetzt wird die Seite unter http://mydomain:333333/ Geöffnet, und <script>alert(document.domain);</script> auf der Seite zeigt "mydomain" an.

Hinweis: Die oben aufgeführte Portnummer wird mit 33333 angenommen. Sie müssen sie in die von Ihrem Visual Studio festgelegte Portnummer ändern.

Beitrag bearbeitet: Heute habe ich es mit einem anderen Domainnamen versucht und die folgende Fehlermeldung erhalten: Der IIS Express-Webserver konnte nicht gestartet werden. URL konnte nicht registriert werden ... Der Zugriff wird verweigert. (0x80070005) . Ich beende den IIS Express, indem ich mit der rechten Maustaste auf das IIS Express-Symbol rechts klicke Klicken Sie in der Windows-Taskleiste in die Ecke und starten Sie mein Visual Studio als Administrator neu. Das Problem ist behoben.

3
wcb1

Lassen Sie dies hier nur für den Fall, dass jemand braucht ...

Ich brauchte benutzerdefinierte Domains für ein Wordpress Multisite-Setup in IIS Express, aber nichts funktionierte, bis ich Webmatrix/Visual Studio als Administrator ausführte. Dann war ich in der Lage Subdomains an dieselbe Anwendung binden.

<bindings> 
    <binding protocol="http" bindingInformation="*:12345:localhost" />
    <binding protocol="http" bindingInformation="*:12345:whatever.localhost" />
</bindings>

Dann gehe zu http: //whatever.localhost: 12345 / .

0
MW247

Ich habe dafür iisexpress-proxy (von npm) verwendet.

https://github.com/icflorescu/iisexpress-proxy

0
trd