通过 IIS Express 使用自定义域

问题描述 投票:0回答:3

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

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

这为我在使用 Facebook 等外部 API 时提供了很大的灵活性。这在过去与内置的 Visual Studio 开发服务器配合使用非常有效,因为我所需要做的就是向那些指向

127.0.0.1
的 DNS 记录添加 CNAME。

但是,我无法让它与 IIS Express 一起工作。我所尝试的一切似乎都失败了。我什至已将正确的 XML 配置添加到 IIS Express 的

applicationHost.config
文件中,但它似乎无法像真正安装 IIS 那样识别这些条目。

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

每当我输入此行并尝试请求

http://dev.example.com:1288
时,我都会收到以下消息:

错误请求 - 主机名无效

有人知道我是否遗漏了一些明显的东西吗?还是 IIS Express 团队真的缺乏远见来看到这种类型的使用?

iis iis-7 iis-express
3个回答
387
投票

这对我有用(针对 VS 2013 进行了更新,请参阅 2010 年的修订历史记录,对于 VS 2015 请参阅:https://stackoverflow.com/a/32744234/218971):

  1. 右键单击您的 Web 应用程序项目 ▶

    Properties
    Web
    ,然后配置
    Servers
    部分,如下所示:

    • 从下拉菜单中选择IIS Express ▼
    • 项目网址:
      http://localhost
    • 覆盖应用程序根 URL:
      http://dev.example.com
    • 单击 创建虚拟目录(如果此处出现错误,您可能需要禁用 IIS 5/6/7/8,将 IIS 的
      Default Site
      更改为端口
      :80
      以外的任何内容,确保 Skype 未使用端口80等)
  2. 可选:将

    Start URL
    设置为
    http://dev.example.com

  3. 打开

    %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config
    (Windows XP、Vista 和 7)并在
    <sites>
    配置块中编辑站点定义,使其符合以下内容:

    <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>
    
  4. 如果运行 MVC:确保

    applicationPool
    设置为“集成”选项之一(如“Clr2IntegratedAppPool”)。

  5. 打开您的

    hosts
    文件并添加行
    127.0.0.1 dev.example.com

  6. ► 开始您的申请!

评论中的一些很好的建议:

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

169
投票

对于 Visual Studio 2015,上述答案中的步骤适用,但

applicationhost.config
文件位于新位置。在“解决方案”文件夹中遵循路径,如果您升级并且计算机上有两个版本的
applicationhost.config
,这会很混乱。

\.vs\config

在该文件夹中,您将看到您的 applicationhost.config 文件

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

我个人使用的是以下配置:

我的主机文件中包含以下内容:

127.0.0.1       jam.net
127.0.0.1       www.jam.net

我的 applicationhost.config 文件中包含以下内容:

<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 时遇到了问题,并意识到我的所有配置都没有被保留。


45
投票

将 Visual Studio 2012 与 IIS Express 一起使用时,更改现有绑定不会永久有效。 (在你关闭 VS 之前它可能会起作用,但在那之后,事情就会变得非常混乱。)

关键是保留现有的本地主机绑定并在其后添加一个新的绑定。

除非您以管理员身份运行,否则您还需要运行

netsh add urlacl
(授予自己以标准用户身份运行非本地主机站点的权限)。

如果要允许任意主机名,完整流程如下:

  1. 创建您的 Web 应用程序,并找出它正在使用的端口(请参阅项目属性、Web 选项卡、项目 URL)。
  2. 在管理员提示符下,运行以下命令(将 portnumber 替换为您在 #1 中计算出的端口号):

    netsh http add urlacl url="http://*:portnumber/" user=everyone
    netsh http add urlacl url="http://localhost:portnumber/" user=everyone
    

您还可以使用您的用户名 (DOMAIN\USER) 而不是所有人,以提高安全性。

  1. 打开applicationhost.config(通常在我的文档\IIS Express下
© www.soinside.com 2019 - 2024. All rights reserved.