Использование порта 80 с IIS Express внутри VS2010
У меня есть приложение, которое я пытаюсь запустить в своей dev-системе под IIS Express из VS2010, для чего мне нужно использовать порт 80, но я не могу заставить его работать. Я ищу информацию о том, что порт 80 зарезервирован.
http://learn.iis.net/page.aspx/1005/handling-url-binding-failures-in-iis-express/
Но даже после этого я все еще получаю сообщение об ошибке vs2010, в котором говорится:
"Не удается запустить веб-сервер IIS Express. Используется порт" 80 ".
Я не знаю, что еще попробовать. Я использовал Process Hacker для отслеживания порта 80 и, по-видимому, он используется System
, запущенным на идентификаторе процесса 4, который является ядром NT и системным процессом. Я не знаю, может ли это помешать мне использовать порт. Я подумал, может быть, это было связано с тем, что http.sys держал этот порт, поэтому ничто не могло его использовать?
Мне удалось запустить IIS Express на порт 80, изменив привязку по умолчанию файла C:\Users\[MyUser]\Documents\IISExpress\config\applicationhost.config
по умолчанию, и, хотя я могу запустить IIS Express вручную таким образом, VS затем получает ошибку, потому что привязка уже существует на этом порт. Поэтому я меняю его на 8080, создаю виртуальный каталог с помощью кнопки в VS2010 (который, как я предполагаю, совпадает с вводом привязки сайта), но я все равно получаю сообщение об ошибке при отправке отладки приложения. Есть ли что-то жестко закодированное в VS2010, которое не позволит запустить IIS Express на порт 80?
UPDATE и FIX: Хорошо, поэтому я нашел еще несколько вещей, чтобы проверить, и я решил проблему, но не полностью. Одна статья предложила убедиться, что у меня не было служб отчетов SQL, поскольку они могут отслеживать порт 80, я использовал его, но не больше, и это не проблема, с которой я столкнулся. Однако я понял, что у меня установлен WebDeploy. Он был связан с пакетом SP2010 SP1 от установщика веб-платформы. Это нормально, так как я хочу, чтобы клиентские инструменты из WebDeploy, но он также установил агента в моей системе, который контролировал порт 80. Я пошел в свой список служб и остановил Web Deploy Agent Service
. Вскоре, когда я это сделал, теперь я могу использовать порт 80 для IIS Express из VS2010.
Новая проблема, связанная с запуском на порту 80 в IIS Express
Однако мое приложение является MVC3-приложением, и я столкнулся с проблемой, потому что MVC3 не захватывает мой запрос вообще, поэтому он не запускает мои действия с контроллером или что-то в этом роде, а txt файл в корне моего приложения может быть достигнут, поэтому я знаю, что это сайт, на котором работает служба IIS Express. У кого-нибудь есть проблемы с MVC3 (я не знаю, является ли он эксклюзивным для MVC3 или нет) в IIS Express на порту 80?
Ответы
Ответ 1
Просто отправьте свой собственный ответ на эту проблему, чтобы я мог отметить вопрос, как было сказано.
Проверьте http://learn.iis.net/page.aspx/1005/handling-url-binding-failures-in-iis-express/
Отключите службу агента веб-развертывания, если она установлена.
Ответ 2
в моем случае я решил проблему, остановив "Службы Reporting Services SQL Server"
вы можете найти его в
панель управления → услуги
Ответ 3
СПАСИБО БОЛЬШЕ, ЧТОБЫ ВЫ ПОЛУЧИТЬ СЕРВИСУ! Это то, что недавно было включено, так как я все это прекрасно работаю и только сегодня установил обновленную версию IIS Express и столкнулся с той же проблемой с портом 80. Теперь, когда я отключил агент Web Deploy, моя система снова работает правильно.
Что касается ASP.NET MVC3, это отлично работает для меня на порту 80 и в порту 443. Было довольно сложно связать оба этих порта, чтобы IIS Express смог использовать их как обычного пользователя (большая часть это ссылка, которую вы указали выше) и установить сертификат SSL, который мы используем. Я вручную создал все записи в файле applicationhost.config, чтобы получить эту работу, а соответствующая секция сайтов ниже:
<sites>
<site name="PHP: A Main" id="2144116512">
<application path="/">
<virtualDirectory path="/" physicalPath="C:\var\www\amain\www" />
<virtualDirectory path="/images" physicalPath="C:\var\www\images" />
</application>
<application path="/admin">
<virtualDirectory path="/" physicalPath="C:\var\www\amain\www\admin" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:80:test.amainhobbies.com" />
<binding protocol="https" bindingInformation="*:443:test.amainhobbies.com" />
</bindings>
</site>
<siteDefaults>
<logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" />
<traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" />
</siteDefaults>
<applicationDefaults applicationPool="Clr4IntegratedAppPool" />
<virtualDirectoryDefaults allowSubDirConfig="true" />
</sites>
Обратите внимание, что мой сайт представляет собой комбинированный сайт PHP и ASP.NET MVC3, так как мы в процессе перезаписи всего, что нужно запустить на ASP.NET MVC3, поэтому большая часть сайта все еще PHP, но много новый материал теперь работает ASP.NET MVC3, и этот материал работает для меня.
Работает ли ваш IIS Express с MVC3 за пределами Visual Studio или вообще не работает на MVC3?
Ответ 4
У меня не было агента веб-развертывания, но он столкнулся с этой проблемой. Вы также можете исправить это, выполнив эту команду, чтобы узнать, какое приложение или служба использует порт, а затем проследить его в диспетчере задач.
netstat -o -n -a | findstr 0.0: 80
Затем откройте диспетчер задач, перейдите в "Процессы", установите флажок "Показывать процессы для всех пользователей", а затем щелкните меню "Вид" и "Перейдите в столбцы", добавьте столбец PID.
Сопоставьте идентификатор процесса с командой netstat с PID в диспетчере задач, и вы найдете сервис или приложение, использующее порт.