Подтвердить что ты не робот

Подключение к Visual Studio для отладки сервера IIS Express через LAN

У меня есть тестовое приложение ASP.NET MVC3, разработанное в VS2012. Когда я начинаю отладку, приложение получает доступ от хост-машины по запросу до http://localhost:<portnumber>. Но если я попытаюсь получить доступ к одному и тому же приложению с удаленного компьютера в интранете через http://<ip>:<portnumber>, я получаю HTTP error 400: Bad request. Invalid Host Name.. Насколько он выполняется в IIS Express, любая конфигурация сервера недоступна.

Есть ли способы решить это?

4b9b3361

Ответ 1

Обновление

Я сделал видео, которое лучше описывает процесс, https://youtu.be/5ZqDuvTqQVs

Если вы используете Visual Studio 2013 или более позднюю версию, убедитесь, что вы запускаете ее как администратор, чтобы это работало.


Откройте файл %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config (в VS2015 это может быть $(solutionDir)\.vs\config\applicationhost.config) файл. Внутри вы должны увидеть что-то вроде этого:

<site name="WebSite1" id="1" serverAutoStart="true">
    <application path="/">
        <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:8080:localhost" />
    </bindings>
</site>

Измените bindingInformation=":8080:localhost" на bindingInformation="*:8080:*" (номер порта, 8080 в моем случае, будет другим.)

Примечание: Если это не работает, попробуйте bindingInformation="*:8080:, звездочку можно удалить.

Затем убедитесь, что ваш брандмауэр разрешает входящие соединения через этот порт. Вам может потребоваться перезагрузить систему или хотя бы Visual Studio, чтобы IISExpress перезагрузил файл конфигурации.

Если это не работает, взгляните на этот ответ: fooobar.com/questions/26451/...

Ответ 2

VisualStudio 2015 Non-Admin

  • В вашем решении dir в файле .vs\config\applicationHost.config измените строку

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

    к

    <binding protocol="http" bindingInformation=":44302:" />

    (где 44302 - ваш порт)


  1. В командной строке администратора:

    я. Включить не-admin для привязки к порту

    netsh http add urlacl url=http://*:44302/ user=Everyone

    II. Разрешить через брандмауэр

    netsh advfirewall firewall add rule name="IISExpress visualstudio app" protocol=tcp localport=44302 dir=in action=allow


  1. Начать отладку с VisualStudio

Ответ 3

За исключением изменения файла конфигурации iisexpress, иногда вам также нужно запустить команду, как показано ниже.

netsh http add urlacl url = http://*: 49419/user = Everyone

Ответ 4

Поскольку я не могу добавить комментарий к сообщению @Garret Fogerlie и в ответ на вопрос комментаторов (@Y.Ecarri и @SamuelEdwinWard), я последовал тому, что предложил Гаррет, используя Visual Studio 2013, запуская его в режиме администратора и изменение файла application.config.

После запуска отладки и просмотра того же сообщения об ошибке я вернулся в application.config и увидел, что новая запись для моего сайта была создана так же, как и проблема Y.Ecarri.

Итак, я остановил отладку, оставил мое решение открытым в Visual Studio и снова отредактировал файл application.config для новой записи. Я также просто удалил теги * и localhost целиком, поэтому для новой записи было следующее:

<binding protocol="https" bindingInformation=":44300:" />

Ответ 5

Как избежать запуска Visual Studio от имени администратора

Используя Garret и @shangkeyun answer, вы можете подключиться к работающему веб-сайту без необходимости запуска Visual Studio от имени администратора:

  1. Открыть %USERPROFILE%\My Documents\IISExpress\config\applicationhost.config
  2. Найдите свой сайт, используя name=MySiteName
  3. Дублируйте существующий элемент <binding> в разделе <bindings>. Теперь у вас должно быть две строки с binding.
  4. Удалите часть "localhost" в bindingInformation.
  5. Теперь он должен выглядеть следующим образом, предполагая, что порт 12345:

    <binding protocol="http" bindingInformation="*:12345:localhost" />
    <binding protocol="http" bindingInformation="*:12345:" />
    
  6. Включить не-админ для привязки к порту

    netsh http add urlacl url=http://*:12345/ user=Everyone
    

ОБНОВЛЕНИЕ 2019: gregmac добавил шаг в белый список экземпляра VS. Я никогда не нуждался в этом, но все равно перечислял:

  1. netsh advfirewall firewall add rule name="IISExpress visualstudio app" protocol=tcp localport=12345 dir=in action=allow

Ответ 6

Благодаря byteit:

Перейдите в applicationhost.config в Documents/IISExpress/config

найдите запись для конкретного сайта, над которым вы работаете:

добавить:

<binding protocol="http" bindingInformation="*:<your site port>:*" />

перед существующими

 <binding protocol="http" bindingInformation="*:<your site port>:localhost" />

Чтобы достичь решения без VS2013, создайте новую запись xml для веб-сайта для вас при перезапуске. Вам нужно будет работать как администратор.

Ответ 7

Некоторые из вас могут потратить много времени на модификацию и тестирование с помощью вашего каталога% USERPROFILE%. Если вы используете отладка VS, используйте $(solutionDir).vs\config\applicationhost.config

Ответ 8

Это то, что сработало для меня:

  • Запустите диспетчер IIS
  • Добавить новый виртуальный каталог, указывающий на папку проектов (C:\VSProjects в моем случае)
  • Выберите новый виртуальный каталог в диспетчере IIS. Выберите Directory Browsing из списка параметров. На правой стороне есть кнопка Enable. Нажмите на нее.

Теперь я могу получить доступ к моей папке и ящику проекта в сети через mypcname\VSProjects\myProj\outputBinViewer.

Ответ 9

После вышеуказанных конфигураций мне пришлось запустить Visual Studio в административном режиме.

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

Ответ 10

Если в Visual Studio Code возникла очень похожая проблема, я решил ее, добавив:

"env": {
      // ...
      "ASPNETCORE_URLS": "http://*:5000" // change to the port you are using
      // ...
},

.. для запуска .json

По-видимому, по умолчанию он связывает протокол http с 'localhost: 5000', поэтому он работает с локальным хостом, но не с IP-адресом - ни удаленно, ни локально.

Если вы пытаетесь достичь точки останова по запросу, поступающему с другого компьютера, не забудьте проверить настройки брандмауэра (и/или антивирус)

надеюсь это поможет