Подключение к Visual Studio отладка сервера IIS Express по локальной сети


84

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

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


Используйте наше бесплатное расширение Conveyor для этого marketplace.visualstudio.com/… оно работает без каких-либо изменений конфигурации, безболезненно.
Джим В. просит восстановить Монику на работе

Ответы:


138

Обновить

Я сделал видео, которое лучше описывает процесс, 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 перезагрузил файл конфигурации.

Если это не сработает, взгляните на этот ответ: https://stackoverflow.com/a/5186680/985284


30
Это решение не помогло мне. В VS2013 после изменения атрибута bindingInformation, когда я открываю IDE и загружаю проект, создается новая запись (т.е. <site name="Website1(1)" id="2" serverAutoStart="true">я все еще не могу получить доступ к веб-сайту с другого компьютера.
Иван Экарри

5
Это сработало для меня в VS2013: gilesey.wordpress.com/2013/04/21/…
Джей Камминс

10
У меня сработало. Основная настройка заключалась в том, чтобы запустить визуальную студию от имени администратора.
Tanmay Mandal 07

20
Я не знаю, почему, похоже, я был единственным, у кого bindingInformation="*:8080:*"возникла эта проблема, но у меня не получилось, и возникла проблема, с которой столкнулся @Y.Ecarri. Что , наконец , закончился рабочая падали звездочку: bindingInformation=":8080:". Парень, это сводило меня с ума, надеюсь, это кому-то поможет.
Drazen Bjelovuk

5
То же, что и Дразен, пришлось использовать режим администратора + bindingInformation=":8080:"(без *)
Матье Шарбонье

43

VisualStudio 2015 без прав администратора

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

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

    к

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

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


  1. Из командной строки администратора:

    я. Включить привязку к порту без прав администратора

    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

Обратите внимание, что папка .vs скрыта в Windows 10. Чтобы увидеть ее, покажите скрытые файлы.
bhathiya-perera

Ой! Ты мой герой! НУ НАКОНЕЦ ТО! Ключ был конфигом папки .vs. Не могу вас отблагодарить!
twsmale

Обратите внимание, как @ArunPrasadES ниже, запустите VS от имени администратора, если вы столкнетесь с ошибкой.
Элмер

@Elmer Запуск вашей IDE и отладка ваших программ от имени администратора в целом - плохая идея (за некоторыми небольшими исключениями). Что наиболее важно, он маскирует проблемы с разрешениями во время разработки (когда они легко исправляются), что в конечном итоге заставляет вашу программу (без необходимости) запускать от имени администратора - такие вещи, как сохранение файлов в папке только для администратора и т. Д. Лучше просто исправьте проблему с разрешениями вашей IDE и / или ОС / пользователя.
gregmac

@gregmac Извините за плохой комментарий, я имел в виду, что у моего IIS были проблемы, если я мог изменить параметры привязки и не запускать VS как Admin, некоторый идентификатор ошибки процесса, который, как я полагаю, связан с разрешениями Windows 10, так как у меня совершенно новая Windows 10 с новой установкой VS 2019. В остальном я согласен с вами на 100%
Элмер

21

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

netsh http add urlacl url = http: // *: 49419 / user = Все


Какая польза от порта 49419? Это просто пример порта, которым с таким же успехом может быть 8080?
oligofren

Отвечая на свой вопрос: да, это порт, на котором работает приложение. Если вы воспользуетесь этим ответом, вам больше не нужно запускать Visual STudio от имени администратора.
oligofren

1
Не могли бы вы вкратце объяснить, как это работает?
Шишир Гупта

12

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

Используя оба ответа Гаррета и @ shangkeyun, вы можете подключиться к работающему веб-сайту без необходимости запускать 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
Добавление netsh изменило ошибку на 'Service Unavailable'
tofutim

@tofutim и здесь. Вы нашли решение?
Frostymarvelous

Вы перезапускали Visual Studio после этого?
oligofren

Привет, я только что заметил, что команда netsh неверна в сочетании с предыдущими строками. Я использовал 12345 в качестве порта выше, но использовал 49419 в качестве примера порта в команде netsh. Это было исправлено в моем обновлении.
oligofren

10

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

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

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

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


Это единственное решение, которое помогло! Благодарю.
code5

2

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


1

Благодаря byteit:

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

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

Добавить:

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

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

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

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


1

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

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


0

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

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

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


0

При отладке очень похожей проблемы в Visual Studio Code я решил ее, добавив:

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

.. на launch.json

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.