IISExpress повертає помилку 503 з віддалених машин


183

Я намагаюся перевірити веб-сайт, який я працюю в локальному екземплярі IISExpress, з іншими машинами / пристроями в моїй локальній мережі. Я запускаю Win7 Pro.

Коли я вперше намагаюся перейти на свою машину з іншої машини в моєму сегменті локальної мережі, я отримую помилку 400: Ім'я хоста недійсне.

Я розумію, що мені потрібно надати віддалений доступ до ACL з командою на командному рядку підвищеного типу:

netsh http add urlacl url=http://mymachinename:50333/ user=everyone

Тепер я отримую послугу 503 - недоступна помилка.

Брандмауер Windows наразі вимкнено, і я можу переглядати свій локальний примірник IISExpress з адресою http://localhost:50333

Яка фінальна частина цієї головоломки конфігурації?


1
Що станеться , якщо ви знайдіть http://mymachinename:50333/ з вашого комп'ютера?
Полковник Паніка

1
Проблема вирішена. Дивіться прийняту відповідь від vikomall
Джефф Фріц

1
Більш глибоке
Кріс

3
Ви можете встановити наше безкоштовне розширення VS "Конвеєр", щоб обійти цю проблему marketplace.visualstudio.com/…
Джим W каже, що відновіть Моніку

Відповіді:


270

Схоже, у файлі applicationhost.config відсутній обов'язковий запис інформації.

  1. Відкрийте файл applicationhost.config. Можливі місця розташування:

    • %userprofile%\Documents\IISExpress\config\applicationhost.config
    • $(solutionDir)\.vs\config\applicationhost.config (VS2015)
    • Якщо цього не зробити, перевірте результат, iisexpress.exeщоб переконатися.
  2. Знайдіть свій запис на веб-сайті та додайте наступне прив’язування до імені машини.

         <binding protocol="http" bindingInformation=":50333:your-machine-name" />
    
  3. Перезапустіть IIS Express


9
Не звертай уваги. Visual Studio створила дублікат конфігураційного запису для елемента. Я її зняв, і вона спрацювала.
нуцоліло

3
IIS Express не завжди використовує конфігураційний файл на цьому шляху. Уважно прочитайте вихід, iisexpress.exeщоб побачити, який конфігураційний файл він використовує.
Полковник Паніка

5
Основний пункт 3, перезапустіть IIS Express! Знайдіть піктограму в системному треї та зупиніть її, щоб змусити її перезапустити. Не впевнений, чи є більш елегантний спосіб. Але це працювало для мене. Дякую!
Сенатор

9
Якщо ви лінуєтеся додавати кожну комбінацію імені хоста / ipaddress, використовуйте * замість "імені вашої машини"
StarQuake

4
Ще одна підказка: Якщо ви клацніть правою кнопкою миші на значку символу IISExpress, ви можете вибрати "Показати всі програми", що відкриє діалогове вікно, де відображатимуться всі програми, які ви зараз працюєте локально. Клацніть правою кнопкою миші на потрібній програмі (не клацніть лівою кнопкою миші або вона відкриє браузер), тоді ви побачите "Шлях" та "Налаштування" нижче. Клацніть лівою кнопкою миші на «Налаштувати», і вона відкриє відповідний файл Applicationhost.config, куди потрібно додати / редагувати прив’язки, як описано вище. Це простий спосіб знайти поточну конфігурацію.
Метт

31

Була лише одна річ, яка працювала на мене.

використання *:portnumber:*було не корисно. Так, зробивши це і переконавшись, що брандмауер Windows був відкритий, я міг підключитися до порту, але я все-таки отримав помилку "503".

Я перевірив кілька речей на місцевому рівні та виявив, що працює лише http: // localhost . Використовуючи реальну IP-адресу (не 127.0.0.1, але, наприклад, 192.168.1.50), все-таки повернув 503 навіть на локальній машині. Я спробував використовувати справжнє ім'я хоста у прив’язках, але IIS Express відмовився запускати. Це насправді може мати щось спільне з тим, як вирішувати ім'я хоста. Я не досліджував це далі.

Нарешті я закінчив використовувати цю конфігурацію:

<binding protocol="http" bindingInformation="*:53351:localhost" />
<binding protocol="http" bindingInformation="192.168.1.50:53351:*" />

Таким чином я зміг підключитися від віддаленої машини за допомогою http://192.168.1.50:53351.


Я потрапив у цю точну помилку, але не хотів жорстко кодувати поточну IP-адресу в конфігурацію, оскільки вона може змінитися. Я виявив, що підстановка працює на частинах IP та імені хоста, тому я закінчив: <binding protocol="https" bindingInformation="*:44300:*" /> <binding protocol="http" bindingInformation="*:8888:*" /> edit: справді спробував зрозуміти розмітку SO, я кинув :).
Брайан Баркер

19

Затративши більше 3 годин на таку повну тему, я вирішив поділитися з вами налаштуваннями. Моя конфігурація - Visual Express 2012 для веб-оновлення 4 для Windows 8. Це було моє перше повернення до MS VS після вивчення (принаймні 8 років), і тепер я впевнений, що правила Linux. На django подібне налаштування зайняло 10 хвилин пошуку документації.

  1. вимкніть брандмауер для тестування

    netsh advfirewall set allprofiles state off
    
  2. прив'язки настройки в моєму випадку локальна адреса - локальна IP = 192.168.1.102 (оскільки посилання не можуть містити нечисловий домен, використовуйте його нижче замість mylocaldomain.com, див. політику stackoverflow) у Documents\IISExpress\config\applicationhost.config

    <bindings>
        <binding protocol="http" bindingInformation="*:53351:mylocaldomain.com" />
        <binding protocol="http" bindingInformation="*:53351:localhost" />
    </bindings>
    
  3. автоматично додайте автозапуск для запуску послуги ISS Express

    <site name="NeuronCharts" id="2" serverAutoStart="true">
    
  4. Додайте якісь дивні правила на http-сервер (я досі не знаю, чи це несесер)

    netsh http add urlacl url=http://mylocaldomain.com:53351/ user=everyone
    
  5. запускайте IISExpress вручну, не з VS IDE

  6. ви побачите, що ISSExpress реєструє прив’язки
  7. запустити браузер, http://mylocaldomain.com:53351 якщо він працює, тоді ми можемо додати правило брандмауера
  8. додати правило брандмауера

    netsh advfirewall firewall add rule name="IISExpressWeb" dir=in protocol=tcp localport=53351 remoteip=any action=allow
    

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

  1. запустити брандмауер

    netsh advfirewall set allprofiles state on
    
  2. ще раз перевірте, чи все працює на локальних та публічних ip

Бажаю тобі удачі

Рафал


3
Це призвело до того, що IIS Express більше не працює на Win8 з VS2013 без запуску VS2013 як адміністратора. Це спричинене IIS Express зараз намагається відкрити для зовнішнього трафіку в результаті команди netsh. Я також ніколи не міг насправді отримати його для обслуговування цього руху; Я отримаю 503. Щоб скасувати проблему, викликану командою netsh у цій відповіді, запустіть це з командного рядка, який працює як адміністратор: netsh http delete urlacl url=http://*:55416/(замініть порт своїм портом)
Chris Moschini

fwiw - мені не потрібен крок 4 (виклик netsh, що @Rafal не впевнений, що потрібен), і хоча мені не потрібна прив'язка "localhost" на кроці 2 для запуску проектів VS2013 в моєму рішенні, фронт кінець завантажується значно швидше, коли ця прив'язка "localhost" залишається на місці.
lukkea

Я виявив, що слідування вищевказаним інструкціям все-таки призвело до використання 503 localhost. Я виявив, що ім'я гостьової машини (Windows) applicationhost.configповинно бути прив’язане, а на хості (Mac) ім'я гостьової машини потрібно відобразити 127.0.0.1в /etc/hosts. Лише тоді прохання до гостьової машини на хості вдалося.
Метт

Одне доповнення до кроку 5. Використовуйте iisexpress.exe / siteid: id, де id - це значення атрибута id вашого сайту в налаштуваннях <site id = "id">, інакше він запустить 1-й сайт.
Mudit Jain

9

Виявлена ​​проблема пов'язана з поганим картографуванням urlacl. Щоб розібратися в цьому:

netsh http show urlacl 

і шукати такі речі, як http://+:80/або порт, до якого ти зобов'язуєшся.

Потім використовуйте

netsh http delete url=<the url from the list>

Це вирішило для мене проблему.


4
повинен бути netsh http видалити urlacl url = <URL зі списку>, це працювало для мене спасибі!
sergiogx

1
Це детальніше обговорюється в блозі msdn . Зрештою, це було і моїм питанням.
Кевін Шарнхорст

3
Дякую, точний синтаксисnetsh http delete urlacl <yoururl>
yoel halb

7

Ніщо не працювало для мене. Нарешті я знайшов iisexpress-proxy

Дивіться мою відповідь https://stackoverflow.com/a/33623399/631527

Ще одне рішення ngrok


Дивовижний! Я спробував усі ці інші рішення, і вони не спрацювали. "Неправильний запит" або "Служба недоступна". Занадто складно. Я встановив модуль вузла і запустив його, він миттєво працює !!
TetraDev

РОБОТИ! святий! Дякую!
Ейсон Бакстер

перевірити також ngrok
Інструментарій

1
Це ПРОСТО працює як шарм з ngrok! Дивно, що потрібно спочатку переходити з localhost до iis-proxy, а потім з проксі в ngrok, але так, спрацювало !. Наприклад, у мене є iisexpress на порту 3028. Я побіг iisexpress-proxy 3028 to 12345і тоді ./ngrok.exe http 12345. 😅
Рібейро

@TetraDev, "Поганий запит" або "Служба недоступна" сталася через те, що заголовок хоста, отриманий під час доступу до localhost від ngrok, не був локальним господарем, як пояснено тут
Dani Torres

3

Що мені допомогло - це клацнути правою кнопкою миші значок "IISExpress", "Показати всі програми". Потім, вибравши веб-сайт, я побачив, який aplicationhost.config він використовує, і виправлення пройшло ідеально.

Конфігурація IISExpress


1

Проблема полягає в оновленні файла applicationhost.config всередині веб-папки замість рішення. Файл конфігурації рішення потрібно змінити


1

Після рішення @vikomall не забудьте запустити VS як адміністратора. Це мені це виправити.


0

Щодо відповіді Ентоні Ріццоло: у Windows 8.1 мені довелося ввести такий текст:

netsh http delete urlacl url=<the url from the list>

Наприклад:

netsh http delete urlacl url=http://+:8689/

0

Жодна з вищезгаданих відповідей для мене не працювала.

У мене було два записи в netsh за одну службу

netsh http show urlacl

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

Один, який використовує сильну маску, інший - слабкий.

Вилучення однієї зі слабкою підстановою зробило цю роботу.

Детальніше про сильну та слабку макіяж у контексті netsh

Коли хост-елемент UrlPrefix складається з одного знаку плюс (+), UrlPrefix відповідає всім можливим іменам хостів в контексті його схеми, порту та відносних елементів GUI і потрапляє в категорію сильних підстановок.

Коли зірочка (*) відображається як головний елемент, тоді UrlPrefix потрапляє у категорію слабких підстановок. Цей вид UrlPrefix відповідає будь-якому імені хоста, пов'язаному із вказаною схемою, портом та relaURUR, який ще не був узгоджений з сильним-маючим підстановкою, явним або обмеженим IP-адресою URL-адресою UrlPrefix. Ця специфікація хоста за певних обставин може використовуватися як підключення за замовчуванням, або може використовуватися для визначення великого розділу простору імен URL без необхідності використання багатьох UrlPrefixes.

https://docs.microsoft.com/en-gb/windows/desktop/Http/urlprefix-strings

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