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

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

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

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

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

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

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

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

Ответ 1

Похоже, вам не хватает записи информации привязки в файле applicationhost.config.

  • Откройте файл applicationhost.config. Возможные местоположения:

    • %userprofile%\Documents\IISExpress\config\applicationhost.config
    • $(solutionDir)\.vs\config\applicationhost.config (VS2015)
    • В противном случае проверьте вывод iisexpress.exe.
  • Найдите свою запись в WebSite и добавьте следующую привязку к имени вашей машины.

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

Ответ 2

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

используя *: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

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

  • отключить брандмауэр для тестирования

    netsh advfirewall set allprofiles state off
    
  • привязки привязок в моем случае локальный адрес 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>
    
  • автоматически добавить автозапуск для службы запуска ISS Express

    <site name="NeuronCharts" id="2" serverAutoStart="true">
    
  • Добавьте некоторые странные правила на http-сервер (я до сих пор не знаю, если это nesseary)

    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
    

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

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

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

Желаю удачи.

Рафал

Ответ 4

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

netsh http show urlacl 

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

Затем используйте

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

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

Ответ 6

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

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

Ответ 7

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

Ответ 8

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

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

Например:

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

Ответ 9

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

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

netsh http show urlacl

enter image description here

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

Удаление этого с помощью слабого шаблона выполнило эту работу.

Подробнее о сильном и слабом шаблоне в контексте netsh

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

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

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

Ответ 10

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