2011-05-09 123 views
11

我目前在IIS Express中为每个我一直在使用的应用程序配置了站点。它们中的每一个都设置为在端口80和443上本地运行,但具有单独的绑定(http://site1/http://site2/),以及在我的主机文件中本地指向的别名。通过Visual Studio在同一端口上运行多个IIS Express实例

我可以在直接启动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快递ISN不受那种限制。我仍然可以将VS附加到通过命令行启动的IIS Express实例,但我更愿意让VS管理它们。

这是VS2010如何处理IIS Express的限制,如果是这样,什么是一个很好的解决方法?

回答

8

你是对的...这是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/site1http://localhost/site2

+0

虽然有似乎是我没有真正的解决方案,我会继续和标志这是作为tho的答案它可能会有所帮助。虚拟目录对我来说不起作用,但是幸运的是我并不需要同时运行的两个应用程序,所以让VS启动它们现在仍然有效。 – 2011-05-16 18:36:52

+0

@vikomall,如何使用C#代码配置这些多个应用程序?我想使用C#代码为单个IIS Express实例配置多个应用程序。 – 2018-02-07 06:12:16

1

开始结合每个网站收集似乎是在同一个端口的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/

+0

欢迎来到SO。好帖子btw!但是你能用英文翻译日文部分吗?所以要保持英语作为他们唯一的语言。 ;) 谢谢。 – ForceMagic 2013-06-07 13:34:08

相关问题