IISExpress возвращает ошибку 503 с удаленных машин - PullRequest
177 голосов
/ 26 марта 2011

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

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

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

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

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

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

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

Ответы [ 10 ]

261 голосов
/ 28 марта 2011

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

28 голосов
/ 01 февраля 2016

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

с использованием *: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.

18 голосов
/ 17 октября 2014

Потратив более 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, см. Политику 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
    

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

  1. запуск брандмауэра

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

Желаю удачи

Рафал

6 голосов
/ 22 июля 2016

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

netsh http show urlacl 

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

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

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

Это исправило проблему для меня.

5 голосов
/ 10 ноября 2015

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

Смотрите мой ответ https://stackoverflow.com/a/33623399/631527

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

2 голосов
/ 18 ноября 2016

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

IISExpress configuration

1 голос
/ 01 сентября 2017

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

0 голосов
/ 06 мая 2019

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

0 голосов
/ 01 октября 2018

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

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

netsh http show urlacl

enter image description here

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

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

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

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

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

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

0 голосов
/ 26 апреля 2018

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

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

Например:

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