Mam testową aplikację ASP.NET MVC3 opracowaną w VS2012. Kiedy zaczynam debugowanie, dostęp do aplikacji jest uzyskiwany z komputera hosta za pośrednictwem żądania do http://localhost:<portnumber>
. Ale jeśli spróbuję uzyskać dostęp do tej samej aplikacji ze zdalnej maszyny w intranecie za pośrednictwem http://<ip>:<portnumber>
Dostaję HTTP error 400: Bad request. Invalid Host Name.
O ile działa w IIS Express, żadna konfiguracja serwera jest niedostępna.
Czy są jakieś sposoby rozwiązania tego problemu?
Odpowiedzi:
Aktualizacja
Zrobiłem film, który lepiej opisuje proces, https://youtu.be/5ZqDuvTqQVs
Jeśli używasz programu Visual Studio 2013 lub nowszego, uruchom go jako administrator, aby to zadziałało.
Otwórz plik
%USERPROFILE%\My Documents\IISExpress\config\applicationhost.config
(w VS2015 może to być$(solutionDir)\.vs\config\applicationhost.config
). Wewnątrz powinieneś zobaczyć coś takiego:<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>
Zmień
bindingInformation=":8080:localhost"
nabindingInformation="*:8080:*"
(numer portu 8080 w moim przypadku, będzie się różnić).Uwaga: jeśli to nie zadziała, spróbuj z
bindingInformation="*:8080:
gwiazdką można usunąć.Następnie upewnij się, że Twoja zapora sieciowa zezwala na połączenia przychodzące na tym porcie. Może być konieczne ponowne uruchomienie systemu lub przynajmniej programu Visual Studio, aby IISExpress ponownie załadował plik konfiguracyjny.
Jeśli to nie zadziała, spójrz na tę odpowiedź: https://stackoverflow.com/a/5186680/985284
źródło
<site name="Website1(1)" id="2" serverAutoStart="true">
Nadal nie mogę uzyskać dostępu do strony internetowej z innego komputera.bindingInformation="*:8080:*"
nie zadziałało to dla mnie i spowodowało problem, którego doświadczał @ Y.Ecarri. Co ostatecznie skończyło się pracy spadał gwiazdkami:bindingInformation=":8080:"
. Chłopcze to doprowadziło mnie do szaleństwa, mam nadzieję, że to komuś pomoże.bindingInformation=":8080:"
(bez *)VisualStudio 2015 Non-Admin
W twoim katalogu rozwiązania, w pliku
.vs\config\applicationHost.config
zmień linię<binding protocol="http" bindingInformation="*:44302:localhost" />
do
<binding protocol="http" bindingInformation=":44302:" />
(gdzie 44302 to twój port)
Z wiersza poleceń administratora:
ja. Zezwól użytkownikowi niebędącemu administratorem na powiązanie z portem
netsh http add urlacl url=http://*:44302/ user=Everyone
ii. Zezwalaj przez zaporę
netsh advfirewall firewall add rule name="IISExpress visualstudio app" protocol=tcp localport=44302 dir=in action=allow
źródło
Oprócz modyfikacji pliku konfiguracyjnego iisexpress, czasami trzeba również uruchomić polecenie jak poniżej.
netsh http add urlacl url = http: // *: 49419 / user = Wszyscy
źródło
Jak uniknąć uruchamiania programu Visual Studio jako administrator
Używając zarówno odpowiedzi Garreta, jak i @ shangkeyun, możesz połączyć się z działającą witryną internetową bez konieczności uruchamiania programu Visual Studio jako administrator:
%USERPROFILE%\My Documents\IISExpress\config\applicationhost.config
name=MySiteName
<binding>
element w<bindings>
sekcji. Powinieneś teraz mieć dwie linie zbinding
.Powinien teraz wyglądać tak, zakładając, że port to
12345
:<binding protocol="http" bindingInformation="*:12345:localhost" /> <binding protocol="http" bindingInformation="*:12345:" />
Zezwól użytkownikowi niebędącemu administratorem na powiązanie z portem
netsh http add urlacl url=http://*:12345/ user=Everyone
EDYCJA 2019: gregmac dodał krok do dodania instancji VS do białej listy. Nigdy tego nie potrzebowałem, ale i tak to wymieniam:
netsh advfirewall firewall add rule name="IISExpress visualstudio app" protocol=tcp localport=12345 dir=in action=allow
źródło
Ponieważ nie mogę dodać komentarza do posta @Garret Fogerlie iw odpowiedzi na problem komentujących (@ Y.Ecarri i @SamuelEdwinWard), postąpiłem zgodnie z sugestią Garreta, używając Visual Studio 2013, uruchamiając go w trybie administratora i zmieniając
application.config
plik.Po uruchomieniu debugowania i zobaczeniu, że otrzymałem ten sam komunikat o błędzie, wróciłem do
application.config
i zobaczyłem, że został utworzony nowy wpis dla mojej witryny, podobnie jak problem Y.Ecarri.Dlatego przestałem debugować, pozostawiłem otwarte rozwiązanie w programie Visual Studio i
application.config
ponownie zmodyfikowałem plik pod kątem nowego wpisu. Po prostu usunąłem też*
znaki ilocalhost
całkowicie, więc miałem następujące informacje dla nowego wpisu:<binding protocol="https" bindingInformation=":44300:" />
źródło
Niektórzy z was mogą spędzić dużo czasu na modyfikowaniu i testowaniu przy użyciu katalogu% USERPROFILE%. Jeśli korzystasz z debugowania VS , użyj $ (solutionDir) .vs \ config \ applicationhost.config
źródło
Dzięki byteit:
Przejdź do applicationhost.config w Documents / IISExpress / config
znajdź wpis dotyczący konkretnej witryny, nad którą pracujesz:
Dodaj:
<binding protocol="http" bindingInformation="*:<your site port>:*" />
przed istniejącym
<binding protocol="http" bindingInformation="*:<your site port>:localhost" />
Aby osiągnąć rozwiązanie bez VS2013, utwórz nowy wpis XML witryny po ponownym uruchomieniu. Będziesz musiał działać jako administrator.
źródło
Po powyższych konfiguracjach musiałem uruchomić Visual Studio w trybie administracyjnym.
źródło
Oto, co zadziałało dla mnie:
C:\VSProjects
w moim przypadku)Directory Browsing
z listy opcji. Po prawej stronie znajduje sięEnable
przycisk. Kliknij to.Teraz mogę uzyskać dostęp do mojego folderu i pojemnika projektu w sieci za pośrednictwem
mypcname\VSProjects\myProj\outputBinViewer
.źródło
Mając bardzo podobny problem z debugowaniem w Visual Studio Code , rozwiązałem go, dodając:
"env": { // ... "ASPNETCORE_URLS": "http://*:5000" // change to the port you are using // ... },
.. to launch.json
Najwyraźniej domyślnie wiąże protokół http z 'localhost: 5000', więc działa z lokalnym hostem, ale nie z adresem IP - ani zdalnie, ani lokalnie.
Jeśli próbujesz trafić w punkt przerwania przez żądanie pochodzące z innego komputera, nie zapomnij sprawdzić ustawień zapory (i / lub programu antywirusowego)
mam nadzieję że to pomoże
źródło