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.
Откройте файл applicationhost.config. Возможные места:
%userprofile%\Documents\IISExpress\config\applicationhost.config
$(solutionDir)\.vs\config\applicationhost.config
(VS2015)- В противном случае, проверьте вывод
iisexpress.exe
чтобы быть уверенным.
Найдите свою запись на веб-сайте и добавьте следующую привязку с именем вашего компьютера.
<binding protocol="http" bindingInformation=":50333:your-machine-name" />
Перезапустите 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 минут поиска документации.
выключите брандмауэр для тестирования
netsh advfirewall set allprofiles state off
привязки установки в моем случае локальным адресом является 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>
добавить автозапуск для службы запуска ISS Express автоматически
<site name="NeuronCharts" id="2" serverAutoStart="true">
Добавьте некоторые странные правила на http-сервер (я до сих пор не знаю, если это необходимо)
netsh http add urlacl url=http://mylocaldomain.com:53351/ user=everyone
запускать IISExpress вручную не из VS IDE
- вы увидите, что ISSExpress регистрирует привязки
- запустить браузер
http://mylocaldomain.com:53351
если это работает, то мы можем добавить правило брандмауэра добавить правило брандмауэра
netsh advfirewall firewall add rule name="IISExpressWeb" dir=in protocol=tcp localport=53351 remoteip=any action=allow
установите значение remoteip на любое, если вы хотите получить доступ к вашему серверу из внешнего мира, если вы хотите получить доступ к локальной сети, используйте localsubnet
запустить брандмауэр
netsh advfirewall set allprofiles state on
проверьте еще раз все ли работает на локальном и публичном 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 он использует, и исправление прошло отлично.
Что касается ответа Энтони Риццоло: в 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