Vezivanje za IP adresu u IIS Express-u

IIS Express podrazumevano prima zahteve samo na adresi localhost. Da bi se aplikacija u razvoju otvorila i sa drugog računara ili telefona u istoj mreži, preko lokalne IP adrese (na primer 192.168.1.2), potrebna su tri koraka: vezivanje u konfiguraciji, rezervacija adrese i pravilo na fajervolu.

Korak 1: vezivanje u konfiguraciji

U konfiguracionom fajlu IIS Express-a, u odeljku <bindings> sajta, pored postojećeg vezivanja za localhost dodaje se i vezivanje za lokalnu IP adresu:

<bindings>
  <binding protocol="http" bindingInformation="*:10080:localhost" />
  <binding protocol="http" bindingInformation="*:10080:192.168.1.2" />
</bindings>

Gde se fajl nalazi zavisi od načina pokretanja:

  • kada se IIS Express pokreće samostalno ili iz Visual Studio-a starijeg od verzije 2015: C:\Users\{korisničko ime}\Documents\IISExpress\config\applicationhost.config;
  • Visual Studio 2015 i 2017: .vs\config\applicationhost.config u folderu rešenja (solution);
  • Visual Studio 2019 i noviji: .vs\{naziv rešenja}\config\applicationhost.config u folderu rešenja.

Port (ovde 10080) treba da bude isti kao u postojećem vezivanju projekta.

Korak 2: rezervacija URL adrese

Windows dozvoljava programu bez administratorskih privilegija da sluša na adresi koja nije localhost samo ako je ta adresa rezervisana. Komanda se pokreće u komandnoj liniji otvorenoj kao administrator:

netsh http add urlacl url=http://localhost:10080/ user=everyone
netsh http add urlacl url=http://192.168.1.2:10080/ user=everyone

Naziv grupe everyone radi samo na engleskoj verziji Windows-a; na lokalizovanoj verziji grupa ima drugo ime i komanda javlja grešku. Sigurnije je navesti grupu preko SID-a, što radi na svakom jeziku sistema:

netsh http add urlacl url=http://192.168.1.2:10080/ sddl=D:(A;;GX;;;WD)

Korak 3: pravilo na fajervolu

Na računaru na kom radi aplikacija treba dozvoliti dolazne veze na taj port. To se može uraditi kroz podešavanja Windows Defender Firewall-a ili jednom komandom, takođe kao administrator:

netsh advfirewall firewall add rule name="IIS Express 10080" dir=in action=allow protocol=TCP localport=10080

Provera i uklanjanje

Posle izmena treba zaustaviti IIS Express (ikonica u sistemskoj traci) i ponovo pokrenuti projekat. Sajt je tada dostupan i na http://localhost:10080/ i na http://192.168.1.2:10080/, i sa drugih uređaja u istoj mreži. Ako se pojavi greška Bad Request - Invalid Hostname, IIS Express nije pročitao vezivanje iz prvog koraka, najčešće zato što je izmenjen pogrešan applicationhost.config.

Kada pristup preko IP adrese više nije potreban, rezervacija i pravilo na fajervolu se uklanjaju:

netsh http delete urlacl url=http://192.168.1.2:10080/
netsh advfirewall firewall delete rule name="IIS Express 10080"

Kada je ovo korisno?

Pristup preko lokalne IP adrese koristan je kada aplikaciju treba isprobati na mobilnom telefonu ili tabletu, kada više članova tima testira istu aplikaciju sa svojih računara ili kada drugi uređaj u mreži treba da pozove API koji je još u razvoju. Više o samom serveru ima u Microsoft-ovom pregledu IIS Express-a.

Novije ASP.NET Core aplikacije umesto IIS Express-a mogu da koriste ugrađeni Kestrel server. Kod njih je dovoljno da se u fajlu launchSettings.json adresa u applicationUrl postavi na http://0.0.0.0:10080; prvi i drugi korak tada nisu potrebni, a pravilo na fajervolu jeste.