2011-05-09 26 views
11

Actualmente tengo sitios configurados en IIS Express para cada una de las aplicaciones en las que he estado trabajando. Cada uno de ellos está configurado para ejecutarse localmente en los puertos 80 y 443, pero tienen enlaces separados (http://site1/ y http://site2/) con esos alias apuntando localmente desde mi archivo de hosts.Ejecución de varias instancias de IIS Express en el mismo puerto a través de Visual Studio

Puedo iniciar estos sitios al mismo tiempo al iniciar IIS Express directamente (desde la línea de comandos), pero dejando que VS2010 los inicie cuando la depuración no tenga éxito. El primer sitio se iniciará y depurará como debería, pero el segundo sitio que se inicia genera un error: "No se puede iniciar el servidor web IIS Express. El puerto '80' está en uso".

Aquí está la configuración de IIS expreso que estoy usando (ligeramente modificada para eliminar nombres de proyecto):

<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> 

Parecería que VS está haciendo un cheque por cualquier cosa actualmente escuchando en el puerto 80, mientras que IIS expreso ISN restringido de esa manera. Todavía puedo hacer que VS se adjunte a las instancias de IIS Express que se iniciaron por línea de comandos, pero preferiría que VS las administre.

¿Es esto una limitación sobre cómo VS2010 maneja IIS Express, y si es así, cuál es una buena solución?

Respuesta

8

Tiene usted razón ... esta es la limitación VS2010. No estoy seguro de si la siguiente solución alternativa funciona para usted o no.

Puede tener un único sitio con múltiples aplicaciones como se muestra a continuación.

<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> 

y luego se puede acceder a ellos como http://localhost/site1 y http://localhost/site2

+0

Aunque no parece haber ninguna solución real para mí, voy a seguir adelante y la marca esto como la respuesta para tho se puede ayudar. Los directorios virtuales no funcionarán para mí, pero, afortunadamente, no he necesitado que ambas aplicaciones se ejecuten al mismo tiempo, por lo que dejar que VS las inicie todavía funciona por el momento. –

+0

@vikomall, ¿Cómo configurar estas múltiples aplicaciones usando el código C#? Quiero configurar varias aplicaciones para una sola instancia de IIS Express utilizando el código C#. –

1

comienzo de la recolección de cada sitio de unión parece ser un error en el caso de Visual Studio mismo puerto. Ejecutar desde el estudio visual se puede hacer mediante la adición de un enlace que especifica los diferentes puertos.

<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" />

Correr http://Site1/http://Site2/ y http://Site1:44300/http://Site2:44301

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

+0

Bienvenido en SO. Buen post por cierto! ¿Pero podrías traducir en inglés la parte japonesa? POR LO TANTO, quiero mantener el inglés como su único idioma. ;) Gracias. – ForceMagic

Cuestiones relacionadas