Skonfiguruj usługi IIS Express pod kątem zewnętrznego dostępu do projektu VS2010

104

Rozwijam projekt w VS2010 i mogę przeglądać moją witrynę lokalnie za pośrednictwem IIS Express. Chciałbym umożliwić dostęp zewnętrzny przez sieć.

Wszystkie moje badania skierowały mnie do tego wpisu na blogu: http://blogs.iis.net/vaidyg/archive/2010/07/29/serving-external-traffic-with-webmatrix-beta.aspx , który jest pomocny, ale tak nie wydaje się pokazywać, jak skonfigurować powiązania dla projektu uruchomionego w Visual Studio (nie mogę znaleźć ekranu na zrzutach ekranu, a informacje o powiązaniu edytowałem w pliku applicationhost.config, ale nie wydaje się, aby było to odzwierciedlone, gdy uruchamiam witrynę z studio wizualne).

szorstki
źródło
10
przeczytaj wpis na blogu Scotta Hanselmana hanselman.com/blog/…
balexandre
możliwy duplikat IIS Express włączający żądanie zewnętrzne
abatishchev

Odpowiedzi:

137

1 Po edycji pliku applicationhost.config (znajdującego się w folderze IISExpress w twoich dokumentach), twoje powiązania witryny powinny wyglądać jak poniżej:

<bindings>
  <binding protocol="http" bindingInformation="*:8080:*" />
</bindings>

Wiązania składają się z trzech części. Najpierw adres IP lub lista, lub jak w tym przypadku, symbol wieloznaczny. Po drugie numer portu, a po trzecie nazwa hosta, lista lub symbol wieloznaczny (do filtrowania według Hostnagłówka). Do celów programistycznych najbardziej odpowiedni jest symbol wieloznaczny, ponieważ prawdopodobnie będziesz używać unikalnego portu.

2 Ponieważ używasz powiązania hosta innego niż lokalny, wymagane są dodatkowe uprawnienia. Możesz uruchomić VS jako administrator lub najlepiej dodać listy ACL URL, aby przyznać wymagane uprawnienia. W poniższym przykładzie uprawnienia są przyznawane wszystkim, ale możesz użyć własnej nazwy użytkownika.

Uwaga:urlacl musi dokładnie odpowiadać wiążące. A więc urlaclfor http://*:8080pozwoli na wiązanie *:8080:*, ale nie na wiązanie, *:8080:localhostnawet jeśli to drugie jest podzbiorem pierwszego. oznacza to, że jeśli zamiast używać symbolu wieloznacznego, podajesz nagłówki hostów w applicationhost.config, musisz dodać dopasowanie urlacldla każdego.

Kroki związane z konfigurowaniem protokołu HTTP.sys pod kątem ruchu zewnętrznego są podobne do konfigurowania witryny do korzystania z zarezerwowanego portu. W systemie Windows 7 lub Windows Vista w wierszu polecenia z podwyższonym poziomem uprawnień uruchom następujące polecenie:

netsh http add urlacl url=http://*:8080/ user=DOMAIN\username

W systemie Windows XP uruchom następujące polecenie w wierszu polecenia z podwyższonym poziomem uprawnień:

httpcfg set urlacl /u http://*:8080/ /a D:(A;;GX;;;WD)

Uwaga 2 Jeśli uruchomienie VS jako administrator lub dodanie wpisów ACL nie rozwiąże problemu, uruchom IIS Express z wiersza polecenia i sprawdź, czy są jakieś komunikaty o niepowodzeniach rejestracji powiązań. Aby rozpocząć od wiersza poleceń, wydaj to polecenie:

iisexpress.exe /site:"your-site-name"

3 Wreszcie będziesz potrzebować odpowiednich wpisów firewalla. W tym celu najłatwiej jest użyć konsoli „Zapora systemu Windows z zaawansowanymi zabezpieczeniami”.

W sekcji „Reguły przychodzące” wybierz „Nowa reguła…”.

  • Typ reguły to „Niestandardowa”.
  • Program to Usługi-> Dostosuj ...-> Zastosuj tylko do usług. (Chociaż IIS Express nie jest usługą, używany przez nią multiplekser HTTP jest).
  • Protokół to TCP
  • Określone porty: Wymień wszystkie porty dla wszystkich powiązań usług IIS Express. W każdej chwili możesz wrócić do tej reguły i dodać porty. (Jeśli stanie się to męczące, możesz dodać zakres, na przykład 40000-65534obejmujący cały zakres używany przez program Visual Studio, ale pamiętaj, że jest to mniej bezpieczne).
  • Działanie to „Zezwól na połączenie”
  • Profil będzie jednym z poniższych. W razie wątpliwości wybierz „Domena + prywatna”.
    • „Domena”, jeśli Twój komputer to firmowy komputer stacjonarny, który będzie działać tylko w domenie lokalnej
    • „Domena + prywatna” Jeśli Twoja jest prywatną maszyną programistyczną w środowisku innym niż korporacyjny lub firmowym laptopem, który również musi działać w domu.
    • „Domena, prywatna i publiczna”, jeśli chcesz przeprowadzić demonstracje w sieciach nieprywatnych.
  • Nazwa powinna być podobna do „IIS Express Dev Server”
vikomall
źródło
12
@ user578913 W końcu znalazłem poprawny plik applicationhost.config, otwierając działający pasek zadań IIS Express i klikając go, a następnie odsyłacz do pliku konfiguracyjnego. Ustawiłem port na 1063 w drugiej linii, ponieważ tak została ustawiona pierwsza linia. Uruchomiłem wiersz poleceń i wszystko wyglądało dobrze. Kiedy przechodzę do nazwy komputera lub nazwy komputera: 1063 z innego komputera w sieci, nadal nic nie widzę.
zgryźliwy
15
ok, ponieważ Visual Studio przypisuje port (inny niż 8080), Zapora systemu Windows go blokowała. Po wyłączeniu zapory systemu Windows (prawdopodobnie mógłbym po prostu otworzyć port, ale jestem w bezpiecznej sieci) i używając adresu IP mojego komputera zamiast nazwy komputera, zadziałało. Dzięki.
Zagłosowałbym
3
Tak, jeśli zapora systemu Windows musi być włączona, należy jawnie dodać port TCP 8080 (lub używany). W systemie Windows 7 początkowo próbowałem przypisać port do „IIS Express Worker Process”. Ale to nie zadziałało. Musiałem użyć opcji „New Rule” i zezwolić na port 8080. Ważny jest również wybór profilu (Domain, Private, Public).
Gautam Jain
2
Uwaga dla siebie: Jeśli odmówiono dostępu, uruchom program Visual Studio jako administrator .
nVentimiglia
3
Od VS2015 lokalizacja pliku to C:\<Path\To\Solution>\.vs\config\applicationhost.config. (Dzięki, @Talon)
snumpy
29

Spędziłem wiele godzin nad tym problemem, próbując przeglądać z mojego Androida Xoom na mój komputer deweloperski win7, aby móc przetestować nową aplikację internetową asp.net, którą utworzyłem. Wszystko, co zrobiłem, to zmieniłem plik applicationhost.config w IISExpress z używania nazwy hosta komputera na aktualny adres IP komputera dla mojej nowej witryny.

<binding protocol="http" bindingInformation="*:80:dev-Lee" />

do

<binding protocol="http" bindingInformation="*:80:192.168.1.102" /> 

Kiedy to zrobiłem i ponownie uruchomiłem IISExpress ... mogłem przejść do mojej maszyny dev-Lee i zobaczyć moją aplikację na moim Xoom!

leester39
źródło
10
Wszystko, co otrzymuję z tymi wszystkimi rozwiązaniami, to błąd 400 - Złe żądanie. Jakieś sugestie?
Krumelur
2
@Krumelur, upewnij się, że edytujesz poprawny plik applicationhost.config. ten w folderze Moje dokumenty.
Codler,
14

Możemy dodać wiele adresów powiązań, edytując applicationhost.config w IIS Express

<bindings>
   <binding protocol="http" bindingInformation="*:62217:localhost" />
   <binding protocol="http" bindingInformation="*:62217:192.168.0.5" />
   <binding protocol="http" bindingInformation="*:62218:192.168.0.5" />
</bindings>

Teraz możemy uzyskać dostęp do strony internetowej z sieci LAN za pomocą adresu IP.

Dostęp do lokalnych witryn z sieci LAN przy użyciu IIS Express

Nasir Mahmood
źródło
6

Visual Studio 2013 SP1 i nowsze (2015) zawierają ustawienie „Zastosuj ustawienia serwera do wszystkich użytkowników (zapisz w pliku projektu)”. Jest to domyślnie włączone. Po włączeniu Visual Studio uruchamia IIS Express z argumentami wiersza polecenia, które powodują, że używa innego pliku konfiguracji. Lokalizacja pliku „applicationhost.config” znajduje się w katalogu projektu w „.vs \ config”.

Jon Eldridge
źródło
1
Tak, to był problem w moim przypadku - próbowałem edytować niepoprawny plik. Jak to się dzieje, możesz zobaczyć, gdzie znajduje się konfiguracja aplikacji IIS Express, klikając ikonę w zasobniku, wyświetlając listę wszystkich aplikacji i wybierając plik. Ścieżka do pliku konfiguracyjnego zostanie zapisana poniżej. Mój był w .vs \ config
evilkos
1
Tak, to samo dla mnie. Dziękuję Ci bardzo.
Vas
1

Jeśli pracujesz z programem Visual Studio, wykonaj następujące kroki, aby uzyskać dostęp do IIS-Express przez adres IP:

  1. Uzyskaj adres IP swojego hosta: ipconfigw wierszu poleceń systemu Windows
  2. GoTo $ (SolutionDir) .vs \ config \ applicationHost.config
  3. Odnaleźć
    <site name="WebApplication3" id="2"> <application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="C:\Users\user.name\Source\Repos\protoype-one\WebApplication3" /> </application> <bindings> <binding protocol="http" bindingInformation="*:62549:localhost" /> </bindings> </site>
  4. Dodaj: <binding protocol="http" bindingInformation="*:62549:192.168.178.108"/>
    z Twoim adresem IP
  5. Uruchom program Visual Studio z uprawnieniami administratora i wszystko powinno działać
  6. Może poszukaj problemów z zaporą, jeśli próbujesz połączyć się zdalnie

Chodzi o to, że Visual Studio ma swój własny plik applicationHost.config!

Daniel Eisenreich
źródło
0

Miałem duży problem z uruchomieniem tego z Visual Studio 2012, przeszedłem od błędów 404 do błędów 503. Ostatecznie pomogło mi usunięcie całej powiązanej konfiguracji z konfiguracji IIS Express ...

"\Program Files (x86)\IIS Express\appcmd.exe" list site
"\Program Files (x86)\IIS Express\appcmd.exe" delete site xxx
"\Program Files (x86)\IIS Express\appcmd.exe" delete site yyy

Następnie utworzyłem nowy katalog wirtualny ze strony właściwości w moim projekcie internetowym w VS, ale zanim utworzyłem katalog wirtualny, zmieniłem nazwę hosta na http: // myhost: 80 / a następnie przycisk tworzenia katalogu wirtualnego. Wcześniej otrzymywałem błędy z informacją, że nazwa hosta musi być „localhost”, ale tym razem tak się nie stało. A potem zadziałało.

Krótko mówiąc, najpierw wyczyść istniejącą konfigurację i zacznij od nowa.

stu
źródło
-2

Jeśli Twoja domena zewnętrzna to „name.mydyndns.com”, musisz napisać:

<binding protocol="http" bindingInformation="*:name.mydyndns.com" />

Działa to w systemie Windows 2003 Server i IIS 7.5 Express.

Juan
źródło
-3

Zrzut ekranu

w puli aplikacji w usługach IIS ustaw opcję „Włącz aplikacje 32-bitowe” na „prawda”.

Mürsel Yıldırım
źródło
Nie jestem pewien, czy to faktycznie dotyczy odpowiedzi na pytanie. Czy chciałeś opublikować to na inne pytanie?
ckittel