"Не вдається запустити веб-сервер IIS Express." у Visual Studio


105

Я намагався запустити свою веб-службу через Visual Studio. Я зіткнувся з такою проблемою, як:

---------------------------
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
побачивши проблему після оновлення Windows 10: developercommunity.visualstudio.com/content/problem/580466/…
Сяо,

Відповіді:


129

З 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 , щоб відобразити всі з'єднання і порти прослуховування.

The oПараметр говорить NetStat , щоб відобразити ідентифікатор процесу , пов'язаний із з'єднанням.

Запуск вищезазначеної команди netstat видасть такі результати, як:

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

Останнє число (9544 тут) - це ідентифікатор процесу.


11
Чудова відповідь! Ви не тільки описуєте рішення, ви також включаєте значення параметрів. Я б хотів, щоб усі відповіді були такими!
Крістіан Пейн

8
Це мені допомогло, і виявилося, що ПІД-файлом є Chrome.exe. Я перезапустив Chrome, і проблема зникла.
astrosteve

1
Чудова відповідь. Використовуючи це, я виявив, що skype прослуховував і порт 80, і порт 443. Я вбив Skype і тоді зміг запустити iisexpress як зазвичай, тепер показуючи свої додаткові прив'язки для портів 80 і 443
Alastair

3
запустити у підвищеному вікні cmd, TASKKILL /PID 2756 /Fзамінити 2756на ваш ідентифікатор процесу
stackoverfloweth

12
Це також можна зробити значно швидшим за допомогою -nкомутатора - він використовує "числовий" вихід, що означає, що він не витрачає час на запити DNS, щоб перетворити IP-адреси на імена хостів.
Tullo_x86

45

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

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

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

2
У підсумку я змінив свій порт за межами виключеного діапазону .. але ЦЕ заощадило мені купу часу. Дякую.
Кори

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 у моєму випадку)

Працювали чудово!
Аль Бельмондо,

12

Я зіткнувся з тією ж проблемою після того, як ми оновили рішення з Visual Studio 2012 до 2015 року. Я прийшов сюди і побіг netstatлише для того, щоб виявити, що жодна інша програма не використовує ті самі порти. Виявляється, у мене були однакові сайти з однаковими портами, відображеними в папці applicationhost.configat Users/<username>/Documents/IISExpress/configі the applicationhost.configв .vsпапці всередині мого рішення. Слід зазначити, що проблема також не почалася відразу після оновлення. Це просто починає постійно давати збої одного ранку. Здається, пара перезавантажень теж не вирішила проблему.

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


Це мені допомогло: файл applicationhost.configзнаходиться в .vs\configпапці під папкою вашого рішення.
Ерік Оппедійк

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 і повторіть спробу

2

У мене була ця проблема під час оновлення проекту MVC . Я скопіював новіший файл .csproj MVC над наявним файлом .csproj, а потім повернувся до повністю робочого проекту. Я не зміг розглянути існуючий номер порту у старому файлі .csproj. Новий проект мав новий номер порту, але загалом назва проекту / збірки. Цього було достатньо, щоб змусити IIS Express втратити розум і викинути цей виняток.

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


2

Найпростіший перший прохід при цьому, не потрапляючи в командну консоль, - це просто вимкнути всі програми (включаючи VS), потім запустити VS самостійно і спробувати ще раз. Ймовірно, інша програма, така як ваш браузер, спричиняє конфлікт. У моєму випадку Chrome спричинив це та був вирішений під час вимкнення та перезапуску VS. Я знову відкрив Chrome і все було добре.

Наведені вище відомості про netstat корисні, але для мене це лише в тому випадку, якщо ви не можете зробити те, що я пропоную.


2

узагальнити всі відповіді. Є 2 рішення. Обидва працювали на мене. - Рішення №1 Убити програму, яка використовує той самий порт. - Рішення No2 Налаштуйте IIS Express на використання іншого порту для вашого проекту.

Рішення №1 (припустимо, порт у повідомленні про помилку був 443) Запустіть у командному рядку:

netstat -ao | findstr 443

він повертає: TCP 0.0.0.0:443 pe01:0 LISTENING 2904 Останнє число (завдяки @ chris-schiffhauer) - це ПІД для вбивства. Перейдіть до диспетчера завдань -> Процеси -> [Показувати процеси від усіх користувачів], Вбийте процес за допомогою 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/

Отже, що я зробив, це видалив усередині прив’язки та запустив веб-додаток, потім він створив нове прив’язку з іншим номером, потім я скопіював новий згенерований порт до своїх налаштувань, після чого помилка зникла.


Цього разу (у мене була ця проблема раніше, це була одна з багатьох причин, представлених у різних відповідях тут), це було причиною.
gburton

2

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

Щоб вирішити проблему, вам просто потрібно ще раз зареєструвати прив'язку. Для цього запустіть з адміністративної оболонки таку команду:

netsh http add iplisten ipaddress=:: 

Це спрацювало для мене, велике спасибі!
Якуб Шуміято


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, тобто:

localhost: 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, все знову запрацювало. Можливо, щось змінилося із способом обробки нижчих номерів портів.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.