Verwenden benutzerdefinierter Domänen mit IIS Express

304

Traditionell 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 gegeben. Dies hat in der Vergangenheit mit dem integrierten Visual Studio Development Server hervorragend funktioniert, da ich diesen DNS-Einträgen, auf die verwiesen wird, lediglich einen CNAME hinzufügen musste 127.0.0.1.

Es ist mir jedoch nicht gelungen, dies mit IIS Express zum Laufen zu bringen. Alles, was ich versucht habe, scheint gescheitert zu sein. Ich habe der applicationHost.configDatei für IIS Express sogar die richtige XML-Konfiguration hinzugefügt , aber die Einträge scheinen nicht so gültig zu sein, wie es eine echte Installation von IIS tun würde.

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

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

Falsche Anfrage (ungültiger Hostname

Weiß jemand, ob mir etwas Offensichtliches fehlt? Oder fehlte dem IIS Express-Team wirklich die Voraussicht, diese Art der Verwendung zu sehen?

Nick Berardi
quelle
Stellen Sie sicher, dass das applicationPool-Attribut des Anwendungsknotens entweder auf "Clr2IntegratedAppPool" oder "Clr4IntegratedAppPool" festgelegt ist. Bei Verwendung von "Clr2ClassicAppPool" oder "Clr4ClassicAppPool" wird der Fehler "Schlechter Hostname" angezeigt.
Neil Monroe
verwirrt - CNAME-Einträge akzeptieren keine IP-Adressen, sondern andere Hostnamen. Meinten Sie einen Rekord?
Scott Coates
1
Ich hatte viele Probleme damit und fand es viel einfacher, nur IIS anstelle von IIS Express zu verwenden
user0b101010
Ich bin auch darauf gestoßen. Ich hatte gehofft, es würde nur die Portnummer überprüfen und die Domain ignorieren. Kein Glück. Ich wünschte, ich könnte "Alle akzeptieren" im Hafen aktivieren ...
Brady Moritz
Jetzt abstimmen! Ich habe einen UserVoice-Vorschlag hinzugefügt: visualstudio.uservoice.com/forums/121579-visual-studio/…
Luke Puplett

Antworten:

367

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

  1. Klicken Sie mit der rechten PropertiesMaustaste auf Ihr Webanwendungsprojekt ▶ ▶ Web, und konfigurieren Sie den ServersAbschnitt wie folgt:
    • Wählen Sie IIS Express ▼aus der Dropdown-Liste
    • Projekt-URL: http://localhost
    • Anwendungsstamm-URL überschreiben: http://dev.example.com
    • Klicken Sie auf Create Virtual Directory(wenn hier eine Fehlermeldung angezeigt wird, müssen Sie möglicherweise IIS 5/6/7/8 deaktivieren, IISs Default Siteauf etwas anderes als Port ändern :80, sicherstellen, dass Skype Port 80 nicht verwendet usw.)
  2. Optional: Stellen Sie die Start URLauf einhttp://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 <sites>Konfigurationsblock so, dass sie wie folgt aussieht:

    <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 applicationPoolausführen: Stellen Sie sicher, dass eine der Optionen "Integriert" (wie "Clr2IntegratedAppPool") aktiviert ist.

  5. Öffnen Sie Ihre hostsDatei und fügen Sie die Zeile hinzu 127.0.0.1 dev.example.com.
  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, dass Ihr IIS ausgeführt wird netsh http add urlacl url=http://dev.example.com:80/ user=everyone
  • Wenn Sie möchten, dass die Site für alle festgelegten Hosts aufgelöst wird bindingInformation="*:80:". Verwenden Sie einen beliebigen Port, 80 ist einfach praktisch.
David Murdoch
quelle
12
Dies ist genau das, was ich getan habe, wollte das gerade aufschreiben, aber du hast mich bis zum Anschlag geschlagen :-) Als Randnotiz, wenn du anderen Entwicklern erlauben willst, deinen IIS zu sehen, möchtest du vielleicht etwas wie "netsh http add" machen urlacl url = dev.example.com:80 user = every "
EBarr
6
Wenn Sie möchten, dass die Site für alle Hosts aufgelöst wird, können Sie Folgendes verwenden: bindingInformation = "*: 80:" Ich verwende dies, damit localtunnel.com funktioniert.
Lance Fisher
17
Ich habe einen Fehler beim Verweigern des Zugriffs erhalten. Das Ausführen von VS 2012 als Administrator hat das Problem behoben.
Xanadont
3
Welche Version von IIS Express ist das? Ich verwende VS2012 (von dem ich glaube, dass es sich um IIS Express 8.0 handelt). Wenn ich im Bereich "Server" der Web-Eigenschaftenseite auf den Radiobutton "Lokalen IIS-Server verwenden" klicke, aktivieren Sie das Kontrollkästchen "IIS Express verwenden" und versuchen Sie es dann Wenn Sie " mydev.example.com " eingeben und dann auf die Schaltfläche "Virtuelles Verzeichnis erstellen " klicken , wird die Fehlermeldung "Das virtuelle Verzeichnis kann nicht erstellt werden. Die Website mydev.example.com kann nicht erstellt werden" angezeigt. Sie müssen "localhost" für den Servernamen angeben.
Michael McCarthy
12
Das ist kompliziert. Man muss die Einstellungen an verschiedenen Stellen ändern. Es ist leicht, ein echtes Durcheinander zu machen. Gibt es wirklich keinen einfacheren Weg?
Anderson
151

Für Visual Studio 2015 gelten die Schritte in den obigen Antworten, aber die applicationhost.configDatei befindet sich an einem neuen Speicherort. Folgen Sie in Ihrem "Lösungs" -Ordner dem Pfad. Dies ist verwirrend, wenn Sie ein Upgrade durchgeführt haben und ZWEI Versionen von applicationhost.configauf Ihrem Computer haben würden.

\.vs\config

In diesem Ordner sehen Sie Ihre Datei applicationhost.config

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

Ich persönlich habe folgende Konfiguration verwendet:

Geben Sie hier die Bildbeschreibung ein

Mit folgendem in meiner Hosts-Datei:

127.0.0.1       jam.net
127.0.0.1       www.jam.net

Und Folgendes in meiner Datei applicationhost.config:

<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, empfehle ich Folgendes:

So führen Sie Visual Studio standardmäßig als Administrator aus

Ich hoffe, dies hilft jemandem. Ich hatte Probleme beim Upgrade auf Visual Studio 2015 und stellte fest, dass keine meiner Konfigurationen übernommen wurde.

njfife
quelle
9
Der entscheidende Teil besteht darin , die zweite *:49707:Bindung hinzuzufügen , anstatt die in vielen anderen Antworten vorgeschlagene Standardeinstellung zu ersetzen*:49707:localhost . Und Sie müssen VS tatsächlich als Administrator ausführen (sic!). Danke dir.
Fracz
3
Sie können auch eine URL verwenden, z. B. http://jam.127.0.0.1.xip.io/wenn Sie Ihre Hosts-Datei nicht ändern möchten. Außerdem müssen Mitarbeiter ihre nicht ändern. Siehe xip.io .
Zack Martin
1
Ich denke, es ist erwähnenswert, dass der Ordner ".vs" versteckt ist und zuerst sichtbar gemacht werden sollte
Enttäuscht am
3
Ich habe bestätigt, dass dies auch in Visual Studio 2017 funktioniert. Interessanterweise brauchte ich nicht beide <binding> -Elemente (nur das erste ohne "localhost"). Visual Studio muss jedoch auf jeden Fall als Administrator ausgeführt werden, was ziemlich ärgerlich ist
Loren Paulsen
1
Ich wünschte nur, es gäbe einen Weg für diejenigen von uns, die nichts administrativ ausführen dürfen, um dies zu tun. Arbeitgeber / Kunden, die das Administratorrecht pauschal verbieten, ohne darüber nachzudenken, wie sie dies sicher ermöglichen könnten, sind unglaublich kurzsichtig.
Steve Pettifer
44

Wenn Sie Visual Studio 2012 mit IIS Express verwenden, funktioniert das Ändern einer vorhandenen Bindung nicht dauerhaft. (Es kann funktionieren, bis Sie VS schließen, 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 ausgeführt werden, müssen Sie auch ausführen netsh add urlacl(um sich die Berechtigung zu erteilen, eine nicht lokale Host-Site als Standardbenutzer auszuführen).

Wenn Sie einen beliebigen Hostnamen zulassen möchten, gehen Sie wie folgt vor:

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

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

Sie können zur besseren Sicherheit auch Ihren Benutzernamen (DOMAIN \ USER) anstelle aller verwenden.

  1. Öffnen Sie 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 nicht unbedingt den zweiten Befehl netsh (localhost). Nur der mit Ihrem spezifischen Hostnamen ist ausreichend.

dmatson
quelle
Ich habe dasselbe getan (1. Ansatz), als ich zu mycustomhost navigierte: myportnr Ich erhalte "Service nicht verfügbar". VS2012. Ich kann den zweiten nicht ausprobieren, da es unter "
Eigene
2
Bei VS2013 funktioniert diese Konfiguration nur, wenn ich dann als Administrator ausgeführt werde! (Als Nicht-Administrator ausgeführt, scheint IIS Express die zweite Bindung zu ignorieren. Wenn ich die Benutzeroberfläche über das Benachrichtigungssymbol öffne, zeigt IIS meine Site als ausgeführt an, zeigt jedoch nur die erste Bindung an, und ich kann nur localhost verwenden ... Wenn Ich arbeite als Administrator, es zeigt beide Bindungen in der Benutzeroberfläche und beide funktionieren.) Ich habe die URLs mit netsh hinzugefügt, aber dies scheint keinen Unterschied zu machen - IIS Express scheint nicht einmal zu versuchen, etwas anderes als localhost zu binden wenn es nicht erhöht ist.
Ian Griffiths
Hinzufügen eines Datensatzes mit dem *gelösten "Service nicht verfügbar" für mich.
Jerone
Was ist mit einem Szenario, in dem Sie HTTPS an Port 443 verwenden müssen?
Kixoka
@Kixoka Ich versuche HTTPS auszuführen. Ich habe es geschafft, es zum Laufen zu bringen, aber der Browser beschwert sich, dass das Zertifikat nicht mit der Domäne übereinstimmt. Ich komme darüber hinweg, aber alle Ressourcen können dann nicht geladen werden, also keine Bilder, Skripte oder CSS.
Prime By Design
24

Der ungültige Hostname gibt an, dass die tatsächlich in der IIS Express-Konfigurationsdatei konfigurierte Site (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 die Webmatrix oder über die Befehlszeile, in der iisexpress.exe (aus dem Installationsverzeichnis) mit dem Parameter / site aufgerufen wird.


Im Allgemeinen werden folgende Schritte ausgeführt, damit vollständig qualifizierte DNS-Namen für den lokalen Zugriff verwendet werden können. Verwenden wir Ihr Beispiel für den DNS-Namen 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 einen Proxy auf das Internet zugreifen, stellen Sie sicher, dass dev.example.com nicht an den Proxy weitergeleitet wird (Sie müssen dies in die Ausnahmeliste Ihres Browsers aufnehmen (für IE wären dies Tools / Internetoptionen / Verbindungen / LAN-Einstellungen). Gehen Sie dann zu Proxy Server / Advanced und setzen Sie dev.example.com in die Ausnahmeliste.
  3. Konfigurieren Sie die IIS Express-Bindung für Ihre Site (z. B. Site1) so, dass sie dev.example.com enthält. Für die Verwendung der Bindung sind Administratorrechte erforderlich. Alternativ kann eine einmalige URL-Reservierung mit http.sys unter Verwendung von vorgenommen werden

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

  4. Starten iisexpress /site:Site1oder öffnen Sie Site1 in WebMatrix

Jaro Dunajsky
quelle
2
Hallo Jaro, danke für die Hilfe, aber 127.0.0.1 ist in meinem DNS nicht in der Hosts-Datei festgelegt, so dass alle Entwickler den gleichen Zugriff haben. Zweitens kann ich das Debuggen in VS nicht starten, es sei denn, die Bindung ist auf "*: 1234: localhost" festgelegt. Dies ist eine völlig nutzlose Einrichtung, da sie an alle IP-Adressen auf meinem Computer gebunden ist, aber nur Host-Header von "localhost" akzeptiert ". Warum haben sie nicht einfach "127.0.0.1:1234:" gemacht und all diesen Mist vermieden? Host-Header werden nicht benötigt, solange sich IP und Port auflösen. Und als Admin zu laufen ist für ein großes Team nur ein großer Schmerz im Arsch. Was für eine Katastrophe IIS Express ist.
Nick Berardi
1
Nur als Referenz Bad Request - Invalid Hostnamebedeutet dies, dass der Hostname, den ich verwenden möchte, nicht aufgelöst werden kann, da das IIS Express-Team in seiner unendlichen Weisheit beschlossen hat, "localhost" als den einzigen Host-Header zu nennen, der funktionieren würde. Und VS lässt Sie nicht anders laufen als "*: 1234: localhost"
Nick Berardi
2
Ich höre Sie zum Thema 127.0.0.1. Der "localhost" in der Bindung ist definitiv ein Schmerz, da er keinen Verkehr für 127.0.0.1 enthält . Das Design wird durch den heutigen Vertrag von http.sys (http-Protokollhandler) eingeschränkt, der "localhost" nur für den nicht administrativen Gebrauch erkennt. Die Anforderung nur für Administratoren kann durch eine einmalige URL-Reservierung bei http.sys verringert werden (aktualisiert die obigen Informationen). Bitte teilen Sie mir Ihre genaue Verwendung mit Visual Studio mit (es ist VS2010 mit SP1 Beta?). Lassen Sie uns versuchen, noch etwas daran zu arbeiten und das Problem (hoffentlich) zu lösen.
Jaro Dunajsky
Hinweis: Wenn der Fehler netsh.exe 87 angezeigt wird, ist der Parameter möglicherweise falsch. Dies kann daran liegen, dass Sie nach Ihrem Hostnamen einen URI-Pfad (/) weggelassen haben.
Tim Lovell-Smith
19

Auf meinem WebMatrix IIS Express installiert von Wechsel "*:80:localhost"zu "*:80:custom.hostname"nicht funktioniert hat ( „Bad Hostnamen“, auch mit dem richtigen etc \ hosts - Mappings), aber "*:80:" tat Arbeit - und mit keinem der zusätzlichen Schritten von den anderen Antworten hier erforderlich. Beachten Sie, dass dies "*:80:*"nicht der Fall ist. Lassen Sie das zweite Sternchen weg.

Rymo
quelle
3
uuuum, also "*:80:*"hat es für mich funktioniert, aber dann habe ich meinen Computer neu gestartet und es würde plötzlich nicht mehr funktionieren, bis ich es geändert habe "*:80:"und alles in Ordnung war! Vielen Dank.
CWSpear
2
Schließlich!! Befolgen Sie auch alle Schritte an anderer Stelle, und das Entfernen des * am Ende hat funktioniert, danke!
Charles Philip
Nur um zu sagen, dass das bei mir funktioniert hat. Ich habe die akzeptierte Antwort ausprobiert und alle Änderungen auf das zurückgesetzt, was Sie gesagt haben, und alles funktioniert hervorragend. Ich verwende VS2013 Update4.
Jason Wilczak
Dies scheint perfekt zu funktionieren. Wenn ich VS2017 verwende, bin ich mir nicht sicher, was ich in die Projekt-URL einfügen soll, damit es das in die Datei applicationhost.config schreibt? Ist es möglich, über VS IDE einzustellen?
Jim
8

Ich habe versucht, die öffentliche IP-Adresse in meinen Workflow zu integrieren, und diese Antworten haben nicht geholfen (ich verwende die IDE gerne als IDE). Aber das Obige hat mich zu der Lösung geführt (nachdem ich ungefähr 2 Stunden lang meinen Kopf gegen eine Wand geschlagen habe, um diese in Visual Studio 2012 / Windows 8 zu integrieren), hat sich Folgendes für mich bewährt.

applicationhost.config generiert von VisualStudio unterC:\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 Administratorso ein, dass es so ausgeführt wird, dass es an externe Adressen (nicht an lokale Hosts) gebunden werden kann.
  • Führen Sie Visual Stuio als aus Administrator, damit der Prozess als Administrator gestartet werden kann, damit die Bindung stattfinden kann.

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

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

Daniel B. Chapman
quelle
8

Wie bei 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 → Ereignisse erstellen → Ereignisbefehlszeile vor dem Erstellen: Screenshot der Projekteigenschaften


::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 auf den gewünschten Port ändern.

Jon
quelle
Eine kleine Ergänzung hier. Stellen Sie sicher, dass Sie Regeln erstellen, um diesen Port in Ihrer Windows-Firewall zu öffnen. Dann hat es wie ein Zauber funktioniert!
Peter M
Ihre Antwort gefällt mir, da das Bearbeiten der Datei .vs \ config \ applicationhost.config nicht möglich ist, wenn mehrere Entwickler IIS Express auf ihren eigenen Computern ausführen. Danke dir!
Colin
6

Die hochgestimmte Antwort ist gültig. Diese Informationen haben mir sehr geholfen. Ich weiß, dass dieses Thema bereits besprochen wurde, wollte aber zusätzliche Informationen 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 mit dem Programm "C: \ Programme \ IIS Express \ appcmd.exe" automatisieren können. Es hat eine Weile gedauert, um die Kontrollparameter herauszufinden, aber ich teile meine Ergebnisse hier. Im Wesentlichen können Sie eine .bat-Datei erstellen, die sowohl den NETSH-Befehl als auch die APPCMD.EXE ausführt (und möglicherweise eine Hostdatei austauschen, wenn Sie möchten), um die Konfiguration des Host-Headers mit IIS Express zu vereinfachen.

Ihre Installations-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 "Deinstallations" -Bat-Datei erstellen, die diese Bindungen bereinigt. (Weil ich oft nur DNS vortäusche, damit ich an Code arbeiten kann, der für den Hostnamen empfindlich ist.)

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 bisschen gebraucht, um sie aufzudecken.

Jesse Flint
quelle
4

Nach Jaros Rat konnte ich dies unter Windows XP und IIS Express (über Web Matrix installiert) mit einer kleinen Änderung zum Laufen bringen und war nicht nur auf localhost beschränkt. Es geht nur darum, die Bindungen richtig einzustellen.

  1. Verwenden Sie WebMatrix, um eine neue Site aus einem Ordner im Stammverzeichnis Ihrer Webanwendung zu erstellen.
  2. Schließen Sie WebMatrix.
  3. Öffnen Sie %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config (Windows XP. Vista und 7 Pfade sind ähnlich) und bearbeiten Sie die Site-Definition im <sites>Konfigurationsblock so, dass sie wie folgt aussieht:

    <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, lassen Sie den applicationPool auf eine der "Integrierten" Optionen eingestellt.

Neil Monroe
quelle
3

Davids Lösung ist gut. Aber ich fand, 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 überschrieben wurde http://dev.example.com. Ein weiteres Problem ist, dass ich benachrichtigt werde, dass der Port 80 bereits verwendet wurde, auch wenn ich Skype unter Verwendung der von David Murdoch empfohlenen 80-Portnummer deaktiviert habe. Also habe ich eine andere Lösung gefunden, die viel einfacher ist:

  1. Führen Sie Notepad als Administrator aus, öffnen Sie 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/) und ändern Sie sie von http://localhost:33333/bis http://mydomain:333333/ Hinweis: nach dieser Änderung sollten Sie weder den Knopf auf der rechten Seite des Projekt - URL - Box „virtuelles Verzeichnis erstellen“ klicken Sie auf die Schaltfläche Speichern des Visual Studio noch klicken , da sie nicht erfolgreich sein wird. 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 geöffnet http://mydomain:333333/und <script>alert(document.domain);</script>auf der Seite wird "mydomain" angezeigt.

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

Nachbearbeitet: 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 ... Zugriff verweigert. (0x80070005) . Ich beende IIS Express, indem ich mit der rechten Maustaste auf das IIS Express-Symbol in der rechten Ecke der Windows-Taskleiste klicke und dann mein Visual Studio als Administrator neu starte. Das Problem ist behoben.

wcb1
quelle
1
jetzt, das ist die Antwort , die als die richtige Lösung in Betracht gezogen werden soll! Stellen Sie sicher, dass Sie die applicationhost.config in .vs / config bearbeiten, wenn Sie Visual Studio 2015 verwenden.
Fabio Salvalai
1

Ich habe alles oben versucht, nichts hat funktioniert. Das Problem wurde durch Hinzufügen von IPv6-Bindungen zur Hosts-Datei behoben. Fügen Sie in Schritt 5 der Antwort von @David Murdochs zwei Zeilen anstelle einer hinzu, dh:

127.0.0.1 dev.example.com
::1 dev.example.com

Ich habe es herausgefunden, indem ich über die $ ping localhostBefehlszeile nachgesehen habe, die früher zurückgegeben hat:

Reply from 127.0.0.1: bytes=32 time<1ms TTL=128

Stattdessen wird jetzt Folgendes zurückgegeben:

Reply from ::1: time<1ms

Ich weiß nicht warum, aber aus irgendeinem Grund hat IIS Express begonnen, IPv6 anstelle von IPv4 zu verwenden.

Morten Aslo-Petersen
quelle
0

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

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

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

Dann gehen Sie zu http: //whatever.localhost: 12345 / wird ausgeführt.

MW247
quelle