Skip to content

Instantly share code, notes, and snippets.

@justingarrick
Last active March 30, 2024 16:24
Show Gist options
  • Star 53 You must be signed in to star a gist
  • Fork 14 You must be signed in to fork a gist
  • Save justingarrick/6322779 to your computer and use it in GitHub Desktop.
Save justingarrick/6322779 to your computer and use it in GitHub Desktop.
Expose IIS or IISExpress running in a Parallels Windows 7/8 VM to your OS X host

Expose IIS or IISExpress running in a Parallels Windows 7/8 VM to your OS X host

Rename your virtual machine

In your Windows 7/8 VM, go to Control Panel > System > Advanced system settings > Computer Name and click Change. Name this whatever you like, e.g. windows. Restart your VM.

Add an ACL rule

Open CMD or Powershell as administrator. Add a URL ACL entry for your new name on the port of your choice, e.g.
netsh http add urlacl url=http://windows:8080/ user=everyone

Add a firewall rule

Open CMD or Powershell as administrator. Add an inbound firewall rule for this new port.

In Windows 8, the syntax is:
netsh advfirewall firewall add rule name="IISExpressWeb" dir=in action=allow protocol=TCP localport=8080

In Windows 7, the syntax is:
netsh firewall add portopening TCP 8080 IISExpressWeb enable ALL

Configure the IIS binding

If you're using IISExpress, edit your applicationhost.config file, typically found at your Documents\IISExpress\config\applicationhost.config. Find your site under sites, and add a binding to the port using your machine name, e.g.

<bindings>    
	<binding protocol="http" bindingInformation="*:8080:localhost" /> <!-- This will be here already -->
	<binding protocol="http" bindingInformation="*:8080:windows" /> <!-- Add this -->
</bindings>

If you're using IIS, open IIS Manager, find your site under YourMachineName > Sites > YourSiteName. Right-click and select Edit Bindings.... Add a binding with the host name you selected in step 1, e.g. Type: http, IP address: All Unassigned, Port: 8080, Host name: windows. Click OK.

Restart IIS/IISExpress

Startup IISExpress with Visual Studio or restart IIS from IIS Manager and hit your URL from a browser on your Mac/VM Host, e.g. http://windows:8080

Sources

http://stackoverflow.com/questions/3313616/iis-express-enable-external-request http://stackoverflow.com/questions/5442551/iisexpress-returns-a-503-error-from-remote-machines http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx

@miguelhughes
Copy link

Thank you for this!
My binding was not under Documents\IISExpress\config, but in the solution instead:
$(solutionDir)\.vs\config\applicationhost.config.

@donniefitz2
Copy link

I tried these instructions and it worked for the most part, but like @miguelhughes said, I had to edit the applicationhost.config in my solution's .vs directory. I also had to disable the Windows firewall completely for some reason.

@fusion27
Copy link

fusion27 commented Oct 13, 2017

Worked well for me using Windows10, thanks so much for posting @justingarrick! Take the rest of the day off! One difference between your solution and mine is that I shut off my VM Windows 10 Firewall altogether.

@modestotech
Copy link

modestotech commented Feb 20, 2019

After several failed tentatives this gist solved it for me.
On a Windows 10 installation I accessed /.vs/config/applicationhost.config in the project and I also added a redirect in /etc/hosts on the host: 10.211.55.3 windows and finally set the Project Url to http://windows:57480 in project settings in VS. Note that I've used 57480, not 8080.

@jackkranz
Copy link

@justingarrick cheers mate, this was super helpful :) !

@MacL3an
Copy link

MacL3an commented Feb 5, 2020

After spending days trying to get this to work this post finally saved me. THANK YOU. Hints that helped me:

  • Visual Studio 2019 doesn't always seem to use IIS Express as default. I kept doing changes to the config file but nothing happened, until I realised VS Project settings was set to "Launch Project", not Launch "IIS Express".
  • Even though I thought I had disabled the Windows Firewall (I had disabled it for Private and Domain networks), it didn't work until I ran netsh advfirewall firewall add rule name="IISExpressWeb" dir=in action=allow protocol=TCP localport=8080

@rossjbartlett
Copy link

After following these steps on Mac OSX Catalina, chrome browser was showing NET::ERR_CERT_REVOKED. The solution to this is to click within the page and type thisisunsafe. Apparently Apple introduced new requirements for SSL certificates to be accepted by Catalina.
Source: https://podtech.com/os/mac-osx/chrome-catalina-certificate-issue/

@lokilim
Copy link

lokilim commented Feb 11, 2020

Hi all, currently what i facing is session expired. I able to access to the page and everything, but when i work with function with session, it will lost the session, after refresh.

@guisantos
Copy link

Worked really well to me, thanks!

@backendeveloper
Copy link

Thanks bro, work done!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment