IISExpress возвращает ошибку 503 с удаленных машин

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

Когда я впервые пытаюсь перейти на свой компьютер с другого компьютера в моем сегменте локальной сети, я получаю сообщение об ошибке 400: имя хоста неверно.

Я понимаю, что мне нужно предоставить удаленный доступ к ACL с помощью команды в командной строке с повышенными правами, например:

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

Теперь я получаю 503 сервис недоступна ошибка.

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

Какова последняя часть этой головоломки конфигурации?

9 ответов

Решение

Похоже, вам не хватает обязательной информации в файле 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

Была только одна вещь, которая работала на меня.

с помощью *: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,

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

  1. выключите брандмауэр для тестирования

    netsh advfirewall set allprofiles state off
    
  2. привязки установки в моем случае локальным адресом является localIP=192.168.1.102 (поскольку ссылки не могут содержать нечисловой домен, используйте его ниже вместо mylocaldomain.com, см. политику stackru) в 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
    

установите значение remoteip на любое, если вы хотите получить доступ к вашему серверу из внешнего мира, если вы хотите получить доступ к локальной сети, используйте localsubnet

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

    netsh advfirewall set allprofiles state on
    
  2. проверьте еще раз все ли работает на локальном и публичном ip

Удачи тебе

Рафал

Обнаружил, что проблема была связана с плохим отображением urlacl. Чтобы понять это:

netsh http show urlacl 

и искать такие вещи, как http://+:80/ или порт, к которому вы привязываете.

Тогда используйте

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

Это решило проблему для меня.

У меня ничего не получалось. Наконец я нашел iisexpress-прокси

Смотрите мой ответ /questions/5905592/kak-vklyuchit-vneshnij-zapros-v-iis-express/5905610#5905610

Другое решение ngrok

Что мне помогло, так это щелкнув правой кнопкой мыши значок "IISExpress", "Показать все приложения". Затем выбрав веб-сайт, я увидел, какой aplicationhost.config он использует, и исправление прошло отлично.

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

Что касается ответа Энтони Риццоло: в Windows 8.1 мне приходилось печатать так:

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

Например:

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

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

Проблема заключается в обновлении файла applicationhost.config внутри веб-папки вместо решения. Файл конфигурации решения, который нужно изменить

Ни один из ответов выше не работал для меня.

У меня было две записи в netsh для одного и того же сервиса

netsh http show urlacl

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

Удаление одного со слабым подстановочным знаком сделало свою работу.

Подробнее о сильных и слабых подстановочных знаках в контексте netsh

Когда элемент хоста UrlPrefix состоит из одного знака плюс (+), UrlPrefix сопоставляет все возможные имена хостов в контексте своей схемы, порта и относительных элементов UR и попадает в категорию подстановочных знаков.

Когда звездочка (*) появляется в качестве основного элемента, тогда UrlPrefix попадает в категорию слабых подстановочных знаков. Этот тип UrlPrefix соответствует любому имени хоста, связанному с указанной схемой, портом и относительным URI, которому еще не сопоставлено UrlPrefix со строгим подстановочным знаком, явным или привязанным к IP-адресу слабым подстановочным знаком. Эта спецификация хоста может использоваться в качестве универсальной по умолчанию в некоторых обстоятельствах или может использоваться для указания большого раздела пространства имен URL без необходимости использования множества UrlPrefixes.

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

Другие вопросы по тегам