Using IIS Express to host a website (temporarily)

.NetIisIis Express

.Net Problem Overview


I have a website (MVC3), which for developement is hosted in IIS Express. (I've run into a bug of Cassini Devserver and had to upgrade...) Now, I'm wondering, is it possible to let other machines on my local net (behind router) see the site as hosted on my machine? (e.g. If I write http://my.local.ip:port into a browser on the same LAN as I am will the page load?)

.Net Solutions


Solution 1 - .Net

By default IIS Express serves only localhost requests. To serve external requests edit applicationhost.config file (located in %userprofile%\documents\iisexpress\config\) and change localhost to '*' or your machine name. (remember for non-localhost binding you must be running as administrator or set URL acl as an administrator and then run iisexpress as non-administrator)

Solution 2 - .Net

Alternatively, you can use something like AnalogX's PortMapper to act as a small loopback proxy to tunnel privately localhost bound ports to publicly open ports.

For example,

  • IISExpress is locally bound to localhost:8080
  • PortMapper port 9090 is configured to relay traffic to localhost:8080

Effectively, any connection on port 9090 (opened by PortMapper) will be tunneled to localhost:8080; thereby bypassing all the netsh nonsense which can be a pain sometimes.

Below is my configuration:

PortMapper configuration

The benefit of using this proxying method is that it does not permanently expose an open IISExpress port on the local dev box.

Rarely, there are times when I want to open the port publicly for meetings; but most of the time, the port should closed and only be accessible by localhost. Modifying firewall rules on the router every time is a pain. Here's how I have things setup:

  • My router firewall forwards 9090 port to PortMapper
  • PortMapper only continues proxying the traffic to IISExpress (listening on 8080) only if PortMapper is running.
Note

Make sure to close out all the PortMapper windows for any changes to take effect.

Note 2

As others have described, you might need to adjust the IISExpress bindings for your application in

 My Documents\IISExpress\applicationhost.config
 project\.vs\config\applicationhost.config

to something like:

<bindings>
  <!-- bindingInformaiton format:
          IPToBindTo:Port:DNSHostName -->

  <!--OLD:
  <binding protocol="http" bindingInformation="*:8080:localhost"/>-->

  <!--Change '*' to 127.0.0.1 and remove 'localhost' right of the port number
      to avoid invalid DNS hostname errors -->
  <binding protocol="http" bindingInformation="127.0.0.1:8080:" />

</bindings>

Solution 3 - .Net

I believe there are three steps to making this succesful:

  1. Add a dns entry or hosts entries so other machines can lookup the dev machine's ip address

  2. Add a binding to applicationhost.config in %userprofile/documents/IISExpress/Config like so

    ...

  3. Run the command found here to allow incoming requests:

    netsh http add urlacl url=http://yourmachinendnsname:yourport#/ user=everyone

Solution 4 - .Net

The answer in this thread is great, it just leaves out the firewall exceptions.

netsh advfirewall firewall add rule name="IIS Express (non-SSL)" action=allow protocol=TCP dir=in localport=8000

netsh advfirewall firewall add rule name="IIS Express (SSL)" action=allow protocol=TCP dir=in localport=44300

Sourced from comments @ http://blogs.iis.net/vaidyg/archive/2010/07/29/serving-external-traffic-with-webmatrix-beta.aspx

Solution 5 - .Net

The Custom Rule trick in Fiddler from http://blogs.microsoft.co.il/blogs/shair/archive/2008/12/15/how-to-use-fiddler-on-localhost.aspx worked for me eventually.

Solution 6 - .Net

yes you can configure as many sites using iis express for local lan use here is link Accessing local sites from Lan IIS Express which explain how to achieve this.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionTDaverView Question on Stackoverflow
Solution 1 - .NetvikomallView Answer on Stackoverflow
Solution 2 - .NetBrian ChavezView Answer on Stackoverflow
Solution 3 - .NetkevincView Answer on Stackoverflow
Solution 4 - .NetjamboNum5View Answer on Stackoverflow
Solution 5 - .NetgiusView Answer on Stackoverflow
Solution 6 - .NetNasir MahmoodView Answer on Stackoverflow