Łączenie się z serwerem Visual Studio debugowania IIS Express przez sieć LAN

84

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?

gator88
źródło
Skorzystaj z naszego bezpłatnego rozszerzenia, Conveyor, aby zrobić to marketplace.visualstudio.com/ ... działa bez żadnych zmian konfiguracji, bezboleśnie.
Jim W mówi, że przywróć Monikę

Odpowiedzi:

138

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"na bindingInformation="*: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

Garrett Fogerlie
źródło
30
To rozwiązanie nie zadziałało. W VS2013, po zmodyfikowaniu atrybutu bindingInformation, kiedy otwieram IDE i ładuję projekt, tworzy nowy wpis (tzn. <site name="Website1(1)" id="2" serverAutoStart="true">Nadal nie mogę uzyskać dostępu do strony internetowej z innego komputera.
Yván Ecarri
5
To zadziałało dla mnie w VS2013: gilesey.wordpress.com/2013/04/21/…
Jay Cummins
10
U mnie działało, a głównym zadaniem było uruchomienie Visual Studio jako administrator.
Tanmay Mandal
20
Nie wiem, dlaczego wydaje mi się, że byłem jedyną osobą z tym problemem, ale 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.
Drazen Bjelovuk
5
Tak samo jak Drazen, musiał użyć trybu administracyjnego + bindingInformation=":8080:"(bez *)
Matthieu Charbonnier
42

VisualStudio 2015 Non-Admin

  1. W twoim katalogu rozwiązania, w pliku .vs\config\applicationHost.configzmień linię

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

    do

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

    (gdzie 44302 to twój port)


  1. 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


  1. Rozpocznij debugowanie z VisualStudio
gregmac
źródło
Zauważ, że folder .vs jest ukryty w systemie Windows 10. Pokaż ukryte pliki, aby go zobaczyć.
bhathiya-perera
O! Jesteś moim bohaterem! WRESZCIE! Kluczem była konfiguracja folderu .vs. Nie mogę ci wystarczająco podziękować!
twsmale
Uwaga: jako mentiod @ArunPrasadES poniżej, uruchom VS jako administrator, jeśli napotkasz błąd.
Elmer
@Elmer Uruchamianie IDE i debugowanie programów jako administrator jest ogólnie złym pomysłem (z kilkoma wąskimi wyjątkami). Co najważniejsze, maskuje problemy z uprawnieniami podczas programowania (kiedy można je łatwo naprawić), co ostatecznie powoduje, że program (niepotrzebnie) wymaga uruchomienia jako administrator - takie rzeczy, jak zapisywanie plików w lokalizacji tylko dla administratora itp. Lepiej po prostu napraw problem ze swoim IDE i / lub systemem operacyjnym / uprawnieniami użytkownika.
gregmac
@gregmac Przepraszam za zły komentarz Chodziło mi o to, że moje IIS miały problemy, jeśli mogłem zmienić opcje wiązania i nie uruchomić VS jako administrator, jakiś identyfikator błędu procesu, który, jak przypuszczam, jest związany z uprawnieniami systemu Windows 10, ponieważ mam zupełnie nowy system Windows 10 z nową instalacją VS 2019. Jeśli chodzi o resztę, w 100% zgadzam się z tobą
Elmer
21

Oprócz modyfikacji pliku konfiguracyjnego iisexpress, czasami trzeba również uruchomić polecenie jak poniżej.

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

shangkeyun
źródło
Do czego służy port 49419? Czy to tylko przykładowy port, który równie dobrze mógłby być 8080?
oligofren
Odpowiadając na moje własne pytanie: tak, to jest port, na którym działa aplikacja. Jeśli użyjesz tej odpowiedzi, nie musisz już uruchamiać programu Visual STudio jako administrator.
oligofren
1
Czy możesz krótko wyjaśnić, jak to działa?
Shishir Gupta
12

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:

  1. otwarty %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config
  2. Wyszukaj swoją witrynę za pomocą name=MySiteName
  3. Powiel istniejący <binding>element w <bindings>sekcji. Powinieneś teraz mieć dwie linie z binding.
  4. Usuń część „localhost” w bindingInformation.
  5. Powinien teraz wyglądać tak, zakładając, że port to 12345:

    <binding protocol="http" bindingInformation="*:12345:localhost" />
    <binding protocol="http" bindingInformation="*:12345:" />
    
  6. 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:

  1. netsh advfirewall firewall add rule name="IISExpress visualstudio app" protocol=tcp localport=12345 dir=in action=allow
oligofren
źródło
6
Dodanie netsh zmieniło błąd na „Usługa niedostępna”
tofutim
@tofutim to samo tutaj. Znalazłeś rozwiązanie?
cudowny mróz
Czy później ponownie uruchomiłeś program Visual Studio?
oligofren
Cześć, właśnie zauważyłem, że polecenie netsh było niepoprawne w połączeniu z poprzednimi wierszami. Użyłem 12345 jako powyższego portu, ale użyłem 49419 jako przykładowego portu w poleceniu netsh. Zostało to naprawione w mojej aktualizacji.
oligofren
10

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.configplik.

Po uruchomieniu debugowania i zobaczeniu, że otrzymałem ten sam komunikat o błędzie, wróciłem do application.configi 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.configponownie zmodyfikowałem plik pod kątem nowego wpisu. Po prostu usunąłem też *znaki i localhostcałkowicie, więc miałem następujące informacje dla nowego wpisu:

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

hvaughan3
źródło
To jedyne rozwiązanie, które pomogło! Dzięki.
code5
2

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

carlo818
źródło
1

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.

Isaac Bolinger
źródło
1

Po powyższych konfiguracjach musiałem uruchomić Visual Studio w trybie administracyjnym.

wprowadź opis obrazu tutaj

Arun Prasad ES
źródło
0

Oto, co zadziałało dla mnie:

  • Uruchom Menedżera usług IIS
  • Dodaj nowy katalog wirtualny wskazujący na folder projektów ( C:\VSProjectsw moim przypadku)
  • Wybierz nowy katalog wirtualny w menedżerze IIS. Wybierz Directory Browsingz listy opcji. Po prawej stronie znajduje się Enableprzycisk. Kliknij to.

Teraz mogę uzyskać dostęp do mojego folderu i pojemnika projektu w sieci za pośrednictwem mypcname\VSProjects\myProj\outputBinViewer.

SaiyanGirl
źródło
0

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

Carlos R Balebona
źródło