传统上,我在本地主机开发服务器上使用自定义域。大致如下:

dev.example.com
dev.api.example.com

这为我在使用外部api(如Facebook)时提供了很大的灵活性。这在过去与内置的Visual Studio Development Server一起工作得很好,因为我所需要做的只是向指向127.0.0.1的DNS记录添加一个CNAME。

但是,我还不能让它与IIS Express一起工作。我所做的一切努力似乎都失败了。我甚至向applicationHost添加了正确的XML配置。IIS Express的配置文件,但它似乎不能像真正安装IIS那样识别有效的条目。

<binding protocol="http" bindingInformation="*:1288:dev.example.com" />

每当我输入这一行并尝试请求http://dev.example.com:1288时,我都会收到以下消息:

错误请求-无效的主机名

有人知道我是否遗漏了什么明显的东西吗?或者IIS Express团队真的缺乏预见到这种类型的使用?


当前回答

把这个留在这里,以防有人需要…

我需要在IIS Express中为Wordpress Multisite设置自定义域,但在我以管理员身份运行Webmatrix/Visual Studio之前,任何东西都不起作用。然后我就可以将子域绑定到同一个应用程序。

<bindings> 
    <binding protocol="http" bindingInformation="*:12345:localhost" />
    <binding protocol="http" bindingInformation="*:12345:whatever.localhost" />
</bindings>

然后转到http://whatever.localhost:12345/将运行。

其他回答

赞成的答案是有效的。这些信息对我帮助很大。我知道这个话题之前已经讨论过了,但我想添加一些额外的输入。 人们说您必须“手动编辑”应用程序。“Users IISExpress/ config”目录下的config文件。这对我来说是个大问题,因为我想通过源代码控制将配置分发给不同的开发人员。

我发现你可以使用“C:\Program Files\IIS Express\appcmd.exe”程序自动更新这个文件。找到控制参数需要一段时间,但我将在这里分享我的发现。本质上,您可以创建一个.bat文件,运行NETSH命令和APPCMD.EXE(如果您愿意,也可以换出一个主机文件),以便使用IIS Express轻松配置主机头。

你的install bat文件看起来是这样的:

netsh http add urlacl url=http://yourcustomdomain.com:80/ user=everyone 

"C:\Program Files\IIS Express\appcmd.exe" set site "MyApp.Web" /+bindings.[protocol='http',bindingInformation='*:80:yourcustomdomain.com']

我也会做一个“卸载”bat文件,将清理这些绑定..(因为很多时候我只是伪造DNS,这样我就可以在主机名敏感的代码上工作)

netsh http delete urlacl url=http://yourcustomdomain.com:80/

"C:\Program Files\IIS Express\appcmd.exe" set site "MyApp.Web" /-bindings.[protocol='http',bindingInformation='*:80:yourcustomdomain.com']

我希望这些信息对某人有所帮助。我花了一点时间才发现。

无效的主机名表明您在IIS Express配置文件中配置的实际站点(很可能)未运行。IIS Express没有IIS那样的流程模型。


要运行站点,需要显式启动(通过从webmatrix打开并访问,或者通过命令行调用iisexpress.exe(从它的安装目录),并使用/site参数。


通常,允许使用完全限定的DNS名称进行本地访问的步骤如下 让我们使用DNS名称dev.example.com的示例

edit %windows%\system32\drivers\etc\hosts file to map dev.example.com to 127.0.0.1 (admin privilege required). If you control DNS server (like in Nick's case) then the DNS entry is sufficient as this step is not needed. If you access internet through proxy, make sure the dev.example.com will not be forwared to proxy (you have to put in on the exception list in your browser (for IE it would be Tools/Internet Options/Connections/Lan Settings, then go to Proxy Server/Advanced and put dev.example.com on the exeption list. Configure IIS Express binding for your site (eg:Site1) to include dev.example.com. Administrative privilege will be needed to use the binding. Alternatively, a one-time URL reservation can be made with http.sys using netsh http add urlacl url=http://dev.example.com:<port>/ user=<user_name> start iisexpress /site:Site1 or open Site1 in WebMatrix

这是为我工作(更新的VS 2013,见2010年的修订历史,VS 2015见这个: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!

评论中有一些很棒的建议:

您可能需要以管理员身份运行Visual Studio。 如果你想让其他开发人员看到你的IIS,运行netsh http add urlacl url=http://dev.example.com:80/ user=everyone 如果您希望站点为所有主机解析,请设置bindingInformation="*:80:"。 使用任何端口,80只是方便。要解析所有主机,您需要以管理员身份运行Visual Studio

像上面的Jessa Flint一样,我不想手动编辑.vs\config\applicationhost。config,因为我希望更改能够持久地保存在源代码控制中。我也不想有一个单独的批处理文件。我使用的是VS 2015。

项目属性→构建事件→预构建事件命令行:


::The following configures IIS Express to bind to any address at the specified port

::remove binding if it already exists
"%programfiles%\IIS Express\appcmd.exe" set site "MySolution.Web" /-bindings.[protocol='http',bindingInformation='*:1167:'] /apphostconfig:"$(SolutionDir).vs\config\applicationhost.config"

::add the binding
"%programfiles%\IIS Express\appcmd.exe" set site "MySolution.Web" /+bindings.[protocol='http',bindingInformation='*:1167:'] /apphostconfig:"$(SolutionDir).vs\config\applicationhost.config"

只需确保将端口号更改为所需的端口。

对于Visual Studio 2015,上述答案中的步骤适用,但应用程序主机。配置文件在一个新的位置。在你的“解决方案”文件夹中,如果你升级了,并且有两个版本的applicationhost,这是令人困惑的。在您的机器上配置。

\.vs\config

在该文件夹中,您将看到您的applicationhost。配置文件

或者,您也可以在解决方案文件夹中搜索.config文件并以这种方式找到它。

我个人使用以下配置:

在我的hosts文件中包含以下内容:

127.0.0.1       jam.net
127.0.0.1       www.jam.net

下面是我的applicationhost。配置文件:

<site name="JBN.Site" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\Dev\Jam\shoppingcart\src\Web\JBN.Site" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:49707:" />
            <binding protocol="http" bindingInformation="*:49707:localhost" /> 
    </bindings>
</site>

记得以管理员身份运行visual studio 2015实例!如果你不想每次都这样做,我建议:

默认情况下,作为管理员如何运行Visual Studio ?

我在尝试升级到visual studio 2015时遇到了问题,并意识到我的配置都没有被转移。