Запуск нескольких экземпляров IIS Express на одном и том же порту через Visual Studio
В настоящее время у меня есть сайты, настроенные в IIS Express для каждого из приложений, над которыми я работал. Каждый из них настроен на локальный запуск на портах 80 и 443, но имеет отдельные привязки (http://site1/ и http://site2/) с теми псевдонимами, указывающими локально из файла моих хостов.
Я могу запускать эти сайты одновременно при непосредственном запуске 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 не ограничивается этим способом. Я все еще могу подключить 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
Ответ 2
начало сбора привязки каждого сайта кажется ошибкой в случае той же визуальной студии порта.
Запуск из визуальной студии можно сделать, добавив привязку, которая указывает разные порты.
<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/