Łą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?


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


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

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


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

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:" />


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


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.



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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.