Using Custom Domains With IIS Express
iis, iis-7, iis-express
Solution
This is what worked for me (Updated for VS 2013, see revision history for 2010, for VS 2015 see this: https://stackoverflow.com/a/32744234/218971):
Right-click your Web Application Project ▶ `Properties` ▶ `Web`, then configure the `Servers` section as follows:
- Select IIS Express ▼ from the drop down
- Project Url: `http://localhost`
- Override application root URL: `http://dev.example.com`
- Click Create Virtual Directory (if you get an error here you may need to disable IIS 5/6/7/8, change IIS's `Default Site` to anything but port `:80`, make sure Skype isn't using port 80, etc.)
Optionally: Set the `Start URL` to `http://dev.example.com`
Open `%USERPROFILE%\My Documents\IISExpress\config\applicationhost.config` (Windows XP, Vista, and 7) and edit the site definition in the `<sites>` config block to be along the lines of the following:
<site name="DevExample" id="997005936">
<application path="/" applicationPool="Clr2IntegratedAppPool">
<virtualDirectory
path="/"
physicalPath="C:\path\to\application\root" />
</application>
<bindings>
<binding
protocol="http"
bindingInformation=":80:dev.example.com" />
</bindings>
<applicationDefaults applicationPool="Clr2IntegratedAppPool" />
</site>
If running MVC: make sure the `applicationPool` is set to one of the "Integrated" options (like "Clr2IntegratedAppPool").
Open your `hosts` file and add the line `127.0.0.1 dev.example.com`.
► Start your application!
Some great advice from the comments:
- You may need to run Visual Studio as Administrator.
- If you want to make other devs see your IIS run `netsh http add urlacl url=http://dev.example.com:80/ user=everyone`
- If you want the site to resolve for all hosts set `bindingInformation="*:80:"`. Use any port you want, 80 is just convenient. To resolve all hosts you'll need to run Visual Studio as an administrator
Problem
Traditionally I use custom domains with my localhost development server. Something along the lines of: ``` dev.example.com dev.api.example.com ``` This has provided me a ton of flexibility when working with external APIs such as Facebook. This has worked great in the past with the built-in Visual Studio Development Server because all I needed to do was add a CNAME to those DNS records pointing to `127.0.0.1`. However, I have not been able to get this to work with IIS Express. Everything I have tried seems to have failed. I have even added the correct XML config to the `applicationHost.config` file for IIS Express, but it doesn't seem to recognize the entries as valid as a true install of IIS would. ``` <binding protocol="http" bindingInformation="*:1288:dev.example.com" /> ``` Whenever I enter this line and try to request `http://dev.example.com:1288` I get the following message: Bad Request - Invalid Hostname Does anybody know if I am missing something obvious? Or did the IIS Express team really lack the foresight to see this type of use?