Запуск нескольких экземпляров IIS Express на одном порту через Visual Studio

в настоящее время у меня есть сайты, настроенные в IIS Express для каждого из приложений, над которыми я работал. Каждый из них настроен на локальный запуск на портах 80 и 443, но имеет отдельные привязки (http://site1/ и http://site2/) С этими псевдонимами, указывающими локально из файла my hosts.

Я могу запускать эти сайты одновременно при запуске IIS Express напрямую( из командной строки), но позволяя VS2010 запускать их при отладке неудачный. Первый сайт будет запускаться и отлаживаться как следует, но второй сайт для запуска генерирует ошибку: "не удается запустить веб-сервер IIS Express. Порт ' 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 не ограничен таким образом. Я все еще могу иметь против присоединения к экземпляры IIS Express, которые были запущены командной строкой, но я бы предпочел иметь VS управлять ими.

это ограничение на то, как VS2010 обрабатывает IIS Express, и если да, то каков хороший обходной путь?

2 ответов


вы правы... это ограничение 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


начало коллекции Привязок каждого сайта кажется ошибкой в случае одного и того же порта visual studio. Запуск из visual studio was можно выполнить, добавив привязку, которая указывает разные порты.

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