11

我目前在 IIS Express 中为我一直在处理的每个应用程序配置了站点。它们中的每一个都设置为在端口 80 和 443 上本地运行,但具有单独的绑定(http://site1/http://site2/),这些别名从我的 hosts 文件中指向本地。

我可以在直接(从命令行)启动 IIS Express 时同时启动这些站点,但在调试不成功时让 VS2010 启动它们。第一个站点将按应有的方式启动和调试,但要启动的第二个站点会生成错误:“无法启动 IIS Express Web 服务器。端口 '80' 正在使用中。”

这是我正在使用的 IIS Express 配置(稍作修改以删除项目名称):

<site name="Site1" id="1" serverAutoStart="true">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="Site1Path" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:80:Site1" />
        <binding protocol="https" bindingInformation="*:443:Site1" />
    </bindings>
</site>
<site name="Site2" id="2" serverAutoStart="true">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="Site2Path" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:80:Site2" />
        <binding protocol="https" bindingInformation="*:443:Site2" />
    </bindings>
</site>

看起来 VS 正在检查当前在端口 80 上侦听的任何内容,而 IIS Express 不受这种方式的限制。我仍然可以将 VS 附加到由命令行启动的 IIS Express 实例,但我更愿意让 VS 管理它们。

这是对 VS2010 如何处理 IIS Express 的限制吗?如果是,有什么好的解决方法?

4

2 回答 2

9

你是对的......这是VS2010的限制。我不确定以下解决方法是否适合您。

您可以拥有具有多个应用程序的单个站点,如下所示。

<site name="MySite" id="1" serverAutoStart="true">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="SiteRoot" />
    </application>
    <application path="/Site1" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="Site1Path" />
    </application>
    <application path="/Site2" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="Site2Path" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:80:Site1" />
        <binding protocol="https" bindingInformation="*:443:Site1" />
    </bindings>
</site>

然后你可以访问http://localhost/site1它们http://localhost/site2

于 2011-05-09T17:05:31.230 回答
2

在同端口visual studio的情况下,每个站点的绑定集合开始似乎是一个错误。可以通过添加指定不同端口的绑定来从 Visual Studio 运行。

<site name="Site1" id="1" serverAutoStart="true">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="Site1Path" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:44300:Site1" />
        <binding protocol="http" bindingInformation="*:80:Site1" />
    </bindings>
</site>
<site name="Site2" id="2" serverAutoStart="true">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="Site2Path" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:44301:Site2" />
        <binding protocol="http" bindingInformation="*:80:Site2" />
    </bindings>
</site>

<binding protocol="http" bindingInformation="*:44300:Site1" />

<binding protocol="http" bindingInformation="*:44301:Site2" />

跑步 http://Site1/ http://Site2/http://Site1:44300/ http://Site2:44301

netsh http add urlacl url=http://Site1:44300/

于 2013-06-07T13:14:54.533 回答