«Невозможно запустить веб-сервер IIS Express». в Visual Studio


108

Я попытался запустить свой веб-сервис через визуальную студию. Я столкнулся с такой проблемой:

---------------------------
Microsoft Visual Studio
---------------------------
Unable to launch the IIS Express Web server.

Failed to register URL "http://localhost:63591/" for site "xxxxxx" application
"/". Error description: The process cannot access the file because it is being
used by another process. (0x80070020)

---------------------------
OK   
---------------------------

Я увидел диспетчер задач и обнаружил, что PID 4 используется системой, а его описание: NT Kernel & System. Итак, я попытался остановить расширение http service. Все службы зависимостей остановлены. Но я столкнулся с проблемой остановки службы http, например

The service is starting or stopping.  Please try again later.

Итак, я попытался остановить и запустить службу вручную. Но процесс завершения отключен. Было бы полезно, если бы кто-нибудь мог помочь с этой проблемой


1
проблема
Сяо

Ответы:


131

С https://www.davidsalter.co.uk/unable-to-launch-the-iis-express-web-server-error-0x80070020/

Код ошибки 0x80070020означает ERROR_SHARING_VIOLATION, что в случае IIS Express (или IIS) означает, что порт, который он пытается прослушивать, используется другим процессом.

Используйте netstatкоманду, чтобы узнать, какое приложение использует порт.

netstat -ao | findstr <port_number_to_search_for>

aПараметр говорит NetStat , чтобы отобразить все соединения и порты прослушивания.

oПараметр говорит NetStat , чтобы отобразить идентификатор процесса , связанный с соединением.

Выполнение указанной выше команды netstat приведет к выводу, например:

C:\>netstat -ao | findstr 4026
TCP    12.0.0.1:4026        cs-pc:4026         LISTENING       9544

Последнее отображаемое число (здесь 9544) - это идентификатор процесса.


11
Отличный ответ! Вы не только описываете решение, но и включаете значение параметров. Я бы хотел, чтобы все ответы были такими!
Christian Payne,

8
Это помогло мне, и оказалось, что оскорбительный PID был Chrome.exe. Я перезапустил Chrome, и проблема исчезла.
Astrosteve

1
Отличный ответ. Используя это, я обнаружил, что Skype прослушивает и порт 80, и порт 443. Я отключил Skype и затем смог запустить iisexpress как обычно, теперь показывая мои дополнительные привязки для портов 80 и 443
Alastair

3
работать в возвышенном CMD окна TASKKILL /PID 2756 /Fзамены 2756с идентификатором процесса
stackoverfloweth

13
Это также можно сделать значительно быстрее с помощью -nпереключателя - он использует «числовой» вывод, что означает, что он не тратит время на запросы DNS для преобразования IP-адресов в имена хостов.
Tullo_x86

52

У меня возникла аналогичная проблема при попытке запустить проект из Visual Studio 2019 в Windows 10. Приложение не могло запуститься, поскольку порт явно использовался другим процессом. Однако netstatкоманда показала, что порт не используется ни одним приложением.

Проведя 2 дня в Google, я нашел решение, которое помогло мне. Порт, который я пытался использовать, находился в диапазоне исключенных портов, который вы можете увидеть, выполнив команду:

netsh interface ipv4 show excludedportrange protocol=tcp

В моем случае эти порты зарезервированы виновниками Docker для Windows и Hyper-V.

Решение

Я удалил Docker (так как он мне не нужен) и отключил Hyper-V. Чтобы отключить Hyper-V: перейдите в: Панель управления-> Программы и компоненты-> Включение или отключение компонентов Windows. Снимите флажок Hyper-V и перезагрузите компьютер.

После перезапуска команда не netsh interface ipv4 show excludedportrange protocol=tcpпоказала зарезервированных портов.

Затем я добавил порт для своего приложения в исключенный диапазон портов, выполнив следующую команду из командной строки с повышенными привилегиями:

netsh int ipv4 add excludedportrange protocol=tcp startport=50403 numberofports=1 store=persistent

Затем я снова включил Hyper-V (Docker можно переустановить при необходимости) и снова перезагрузил компьютер.

Hyper-V теперь зарезервировал свои порты без вмешательства в порт, используемый моим приложением: зарезервированные диапазоны портов.


У меня это сработало, за исключением того, что мне нужен Docker, поэтому я просто отключил его при запуске, вместо того, чтобы удалять.
cderrick

3
Я закончил тем, что изменил свой порт за пределы исключенного диапазона ... но ЭТО сэкономило мне массу времени. Спасибо.
Кори

2
Как и @Cory, я изменил свой порт в vs, чтобы он был чем-то за пределами диапазона, что раздражает, потому что теперь мне приходится менять приложения-ссылки каждый раз, когда я это делаю, но лучше, чем полный перезапуск.
Ник Рубино,

Я искал это годами . Мне интересно, есть ли способ точно определить, какое приложение украло мои порты? Спасибо.
Саймон Мурье,

Отключение Hyper-V и перезагрузка устранили это для меня
Кайл Беркетт

30

У меня такая же проблема. Я только что перезапустил Visual Studio, и все заработало.


1
Мой компьютер перезагрузился после обновления, и netstat не показала, что процесс использует порт. Это было единственное решение, которое сработало. Спасибо!
goodies4uall

1
пришлось перезапустить и мою машину
Махмуд Хбубати

На удивление перезапуск Visual Studio (2017) тоже сработал для меня. Спасибо!
Thomas Gassmann

В моем случае мой ящик с Windows 10 был синим, и мне пришлось дважды перезагружаться . Другие проекты веб-сайтов работали нормально (другой локальный порт), и ни один из других ответов здесь не работал. Изменение порта для проекта тоже не помогло. В самом IIS Express должна быть какая-то другая конфигурация.
Грейнджер

Похоже, это происходит со мной всякий раз, когда я запускаю проект в VS 2019 с отладкой с помощью F5, а затем пытаюсь запустить его без отладки с помощью Ctrl + F5, когда он терпит неудачу. Перезагрузка исправляет это, хотя я хотел бы вообще предотвратить это.
pwhe23

28

Я была такая же проблема. Как упоминает @Kautsky Lozano выше, другое приложение использует этот порт.

Итак [для ОС Windows] просто:

  • Откройте монитор ресурсов (Диспетчер задач -> Производительность -> Монитор открытых ресурсов)
  • Щелкните вкладку Сеть .
  • И в TCP Connections найдите приложение, которое использует локальный порт, который использует IIS Express, и закройте его. (в моем случае это был firefox)

Сработало отлично!
Al Belmondo

12

Я столкнулся с той же проблемой после того, как мы обновили решение с Visual Studio 2012 до 2015 года. Я пришел сюда и побежал netstatтолько для того, чтобы обнаружить, что ни одно другое приложение не использует те же порты. Оказывается, у меня были одни и те же сайты с одинаковыми портами, отображенными в applicationhost.configat Users/<username>/Documents/IISExpress/configи applicationhost.configв .vsпапке внутри моего решения. Следует отметить, что проблема возникла не сразу после обновления. Однажды утром он просто начал систематически давать сбой. Пара перезагрузок тоже не решила проблему.

Удаление конфликтующих сайтов из одного, хранящегося в моих документах, и перезапуск Visual Studio решили проблему.


Это помогло мне: он applicationhost.configнаходится в .vs\configпапке в папке с вашим решением.
Erik Oppedijk 08

6

Если netstat не показывает ничего, что уже использует порт

netstat -ano | findstr <your port number>

Порт может быть исключен, попробуйте эту команду, чтобы увидеть, не заблокирован ли диапазон чем-то еще:

netsh interface ipv4 show excludedportrange protocol=tcp

Вы можете попытаться разблокировать диапазон от начального порта для ряда портов (требуется командная строка с администратором):

netsh int ip delete excludedportrange protocol=tcp numberofports=<number of ports> startport=<start port>

Что касается меня, я не мог их разблокировать, я просто получил сообщение «Доступ запрещен», поэтому мне пришлось выбрать другой порт для своего сайта.



3

У меня была эта проблема, хотя netstat не показывал никаких конфликтов.

Следующее исправило это для меня:

  1. Закройте Visual Studio
  2. Откройте проводник
  3. Перейдите в папку проблемного проекта
  4. Удалите папки obj и bin
  5. Удалите файл * .user (возможно, это необязательно)
  6. Перезапустите Visual Studio и попробуйте еще раз.

3

После обновления Windows 10 и / или Visual Studio 16+ из-за внутренней ошибки IISExpress может не зарегистрировать какой-либо веб-сайт разработки, поскольку он больше не принимает localhostподключения.

Чтобы решить проблему, вам просто нужно снова зарегистрировать привязку. Для этого запустите из административной оболочки следующую команду:

netsh http add iplisten ipaddress=:: 

2

У меня возникла эта проблема при обновлении проекта MVC . Я скопировал новый MVC .csproj поверх моего существующего .csproj файла, а затем вернулся к полностью рабочему проекту. Что я не учел, так это существующий номер порта в старом .csproj. У нового проекта был новый номер порта, но общее имя проекта / сборки. Этого было достаточно, чтобы IIS Express потерял рассудок и выбросил это исключение.

Достаточно просто извлечь старый номер порта из git и изменить URL-адрес IIS Express, чтобы включить его в настройки проекта, чтобы исправить это.


2

Самый простой способ сделать это, не заходя в командную консоль, - просто закрыть все приложения (включая VS), затем запустить VS самостоятельно и повторить попытку. Вероятно, конфликт вызывает другое приложение, например ваш браузер. В моем случае это вызвало Chrome и было решено при выключении всего и перезапуске VS. Я снова открыл Chrome, и все было хорошо.

Приведенный выше материал netstat полезен, но для меня это только в том случае, если вы не можете сделать то, что я предлагаю.


2

Обобщить все ответы. Есть 2 решения. Оба работали на меня. - Решение №1. Убейте приложение, использующее тот же порт. - Решение №2 Настройте IIS Express на использование другого порта для вашего проекта.

Решение №1 (предположим, что порт в сообщении об ошибке был 443) Выполните в командной строке:

netstat -ao | findstr 443

он возвращает: TCP 0.0.0.0:443 pe01:0 LISTENING 2904 последнее число (спасибо @ chris-schiffhauer) - это PID, который нужно убить. Перейдите в Диспетчер задач -> Процессы -> [Показать процессы от всех пользователей], завершите процесс с PID = 2904. В моем случае это был хост VmWare.

Решение №2 (Предположим, сообщение было: Не удалось зарегистрировать URL-адрес « http: // localhost: 433 / » для сайта «MyProject.Website0» ... ). Откройте следующий файл в Notepad ++: C:\Users\MY_USER_NAME\Documents\IISExpress\config\applicationhost.configнайдите в нем строку, содержащую:

<site name="MyProject.Website0" id="...
...
            <bindings>
                <binding protocol="http" bindingInformation="*:80:localhost" />
                <binding protocol="https" bindingInformation="*:443:localhost" />
            </bindings>

Либо поменяйте 433на что-то другое, например, 4330или удалите конфликтующий <binding.../>тег.


2

В моем случае помогло следующее:

  • Удалите Сайт из .vs \\ config \ applicationhost.config
  • Удалите сайт из Documents \ IISExpress \ config \ applicationhost.config
  • Удалите IISUrl из .csproj

Когда я перезапустил Visual Studio, он присвоил проекту совершенно новый номер порта и отлично работал.


2

Номера портов не совпадают

В моем случае проблема была в моих тегах привязки, найденных в файле конфигурации в .vs в папке моего решения, номера портов не совпадали. Привязки были следующие

<bindings>
     <binding protocol="http" bindingInformation=":16433:localhost" />
</bindings>

И в моих настройках URL был установлен как http://localhost:1943/

Итак, я удалил внутреннюю привязку и запустил свое веб-приложение, затем он сгенерировал новую привязку с другим номером, затем я скопировал новый сгенерированный порт в свои настройки, после чего ошибка исчезла.


На этот раз (у меня была эта проблема раньше, это была одна из многих причин, представленных в различных ответах здесь), это была причина.
viewsUnknown


1

Мне удалось решить эту проблему, удалив все от тегов <site>до </site>в

Users/<username>/Documents/IISExpress/config/applicatiohost.config файл

<sites>
  <site>
     .
     .   ===> remove this content including the <site> and </site> tags.
     .
  </site>
</sites>

1

Потратив полдня на решение этой же проблемы, я почувствовал, что должен добавить решение, которое в конечном итоге сработало для меня.

TL; DR Если netstatуказывает, что проблемный элемент не используется, все же попробуйте несколько других из совершенно другого диапазона

Я сталкивался с этой проблемой раньше, но обычно перезапуск Visual Studio, смена портов (увеличение на 1) или перезагрузка делают свое дело. Однако в этом случае ничего из этого не помогло, и netstatне было обнаружено противоречивого процесса. Я даже переустановил IIS и Visual Studio и удалил несколько других программ, которые, как я подозревал, могли мешать. Казалось, что IIS пытался запустить несколько экземпляров одного и того же сайта.

В конце концов я попробовал бегать netstatбез него findstr. Я визуально просмотрел список активных портов и заметил, что, хотя те, которые я пробовал, не указаны в списке, было несколько процессов, использующих порты из аналогичного диапазона. Поэтому вместо этого я поискал свободный диапазон, выбрал номер порта и, похоже, теперь работает.

Я хотел бы услышать, может ли кто-нибудь объяснить, почему это могло сработать?


Это решение также исправило это для меня.
Rastographics

1

Сегодня я столкнулся с этой проблемой в Visual Studio 2019 и потратил 3 часа, прежде чем окончательно разобраться в проблеме. Visual Studio использует 2 файла для отслеживания номера порта SSL, поэтому вам нужно исправить оба, и вы должны исправить оба, пока Visual Studio закрыта. Эти два файла - это файл applicationhost.config, который находится в папке .vs \ ??? \ config вашего решения; а также папку .csproj.user вашего веб-проекта. Отредактируйте оба файла и удалите конфиги. Может даже просто удалить оба файла. Затем повторно откройте приложение в Visual Studio. Удачи!


Если ваше решение содержит простой старомодный веб-сайт (не веб-приложение), то номера портов также находятся в файле решения .sln
nuander

1
  1. Закрыть визуальную студию
  2. удалить папку ".vs"
  3. Попробуйте изменить порт "localhost: 8080"

У меня это сработало.


1

Я выполнил инструкции @Zoti и использовал Resource Monitor, чтобы найти нужный порт.

Оказывается, Outlook был случайным образом назначен порт для канала связи. С точки зрения морали, это может быть что угодно.


1

Причина этой ошибки в том, что вы указываете неправильный номер порта своему приложению.

just use http ports for your application to run

используйте порт рядом с номером 8080, то есть:

локальный: 8090

чтобы изменить порт для вашего приложения в Visual-Studio

goto project properties > web > Server > ProjectUrl


0

Я уже пробовал следующее:

  • Перезапустил Visual Studio
  • Проверьте все доступные порты, которые могут прослушивать мой конкретный номер, но всегда возвращают нулевые результаты. В моем порту не прослушиваются никакие процессы.
  • Я тоже пробовал использовать это, но нулевые результаты.

    netstat -aon | найти ": 80"

  • Я тоже пробовал использовать, но тоже возвращал нулевые результаты.

    netstat -ao | findstr

Я удалил этот « Microsoft.VsHub.Server.HttpHostx64.exe », после чего мой проект успешно запустился и запустился в браузере. Ошибка исправлена. Я не уверен, почему, но это работает.

Вот скриншот:

введите описание изображения здесь


0

У меня была та же проблема, но она разрешилась, когда я перезапустился с правами администратора. (Возможно, это был только перезапуск)


0

Сегодня у меня была такая же проблема, и я ничего не нашел в Интернете. Я много лет использую порт 2057, но вдруг он перестал работать. Изменение его на другое меньшее число, например 2058, дало такое же сообщение об ошибке, но когда я изменил его на 20057, все снова заработало. Возможно, что-то изменилось в том, как обрабатываются младшие номера портов.


0

IIS Express не запускает решение в Visual Studio

  • Перейти в диспетчер задач
  • Найдите процесс "Application Frame Host"
  • Завершить этот процесс
  • Попробуй снова бежать
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.