通过 Visual Studio 在同一端口上运行多个 IIS Express 实例
Posted
技术标签:
【中文标题】通过 Visual Studio 在同一端口上运行多个 IIS Express 实例【英文标题】:Running multiple IIS Express instances on the same port through Visual Studio 【发布时间】:2011-08-21 17:05:00 【问题描述】:我目前在 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 方式的限制吗?如果是,有什么好的解决方法?
【问题讨论】:
【参考方案1】:你是对的......这是 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
访问它们
【讨论】:
虽然对我来说似乎没有真正的解决方案,但我会继续并将其标记为可能有帮助的答案。虚拟目录对我不起作用,但幸运的是我还不需要两个应用程序同时运行,所以让 VS 启动它们现在仍然有效。 @vikomall, 如何使用 C# 代码配置这些多个应用程序?我想使用 C# 代码为单个 IIS Express 实例配置多个应用程序。【参考方案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/
【讨论】:
以上是关于通过 Visual Studio 在同一端口上运行多个 IIS Express 实例的主要内容,如果未能解决你的问题,请参考以下文章
如何强制 Visual Studio 在 https 中运行网站
使用docker-compose和https时如何让Visual Studio启动正确的URL
Visual Studio 远程调试 - 在同一域中找不到计算机
Visual Studio调试器指南---Threads窗口