Настроить IIS Express для внешнего доступа к проекту VS2010

104

Я разрабатываю проект в VS2010 и могу просматривать свой сайт локально через IIS Express. Я хочу разрешить внешний доступ по сети.

Все мои исследования привели меня к этой записи в блоге: http://blogs.iis.net/vaidyg/archive/2010/07/29/serving-external-traffic-with-webmatrix-beta.aspx , что полезно, но действительно похоже, не показано, как настроить привязки для проекта, запущенного в Visual Studio (я не могу найти экран на снимках экрана, и я отредактировал информацию привязки в applicationhost.config, но, похоже, это не отражается, когда я запускаю сайт из визуальная студия).

вздорный
источник
10
пожалуйста, прочтите сообщение в блоге Скотта Хансельмана hanselman.com/blog/…
balexandre
возможный дубликат IIS Express для включения внешнего запроса
абатищев 04

Ответы:

137

1 После редактирования файла applicationhost.config (расположенного в папке IISExpress в ваших документах) привязки вашего сайта должны выглядеть следующим образом:

<bindings>
  <binding protocol="http" bindingInformation="*:8080:*" />
</bindings>

Переплеты состоят из трех частей. Сначала IP-адрес или список, или, как в данном случае, подстановочный знак. Во-вторых, номер порта и, в-третьих, имя хоста, или список, или подстановочный знак (для фильтрации по Hostзаголовку). Для целей разработки здесь больше всего подходит подстановочный знак, поскольку вы, вероятно, будете использовать уникальный порт.

2 Поскольку вы используете привязку, отличную от localhost, требуются дополнительные разрешения. Вы можете запустить VS от имени администратора или, желательно, добавить списки ACL URL для предоставления необходимых разрешений. В приведенном ниже примере разрешение предоставляется всем, но вы можете использовать свое собственное имя пользователя.

Примечание . urlaclДолжен точно соответствовать переплету. Таким образом, urlaclfor http://*:8080разрешит привязку *:8080:*, но не привязку, *:8080:localhostдаже если последнее является подмножеством первого. это означает, что если вместо использования подстановочного знака вы указываете заголовки хоста applicationhost.config, вы должны добавить соответствие urlaclдля каждого из них.

Действия по настройке HTTP.sys для внешнего трафика аналогичны настройке сайта для использования зарезервированного порта. В Windows 7 или Windows Vista из командной строки с повышенными привилегиями выполните следующую команду:

netsh http add urlacl url=http://*:8080/ user=DOMAIN\username

В Windows XP выполните следующую команду из командной строки с повышенными привилегиями:

httpcfg set urlacl /u http://*:8080/ /a D:(A;;GX;;;WD)

Примечание 2. Если запуск VS от имени администратора или добавление записей ACL не решает вашу проблему, запустите IIS Express из командной строки и проверьте, есть ли сообщения об ошибке регистрации привязки. Чтобы начать работу из командной строки, введите эту команду:

iisexpress.exe /site:"your-site-name"

3 Наконец, вам потребуются соответствующие записи брандмауэра. Для этого проще всего использовать консоль «Брандмауэр Windows в режиме повышенной безопасности».

В разделе «Правила для входящих подключений» выберите «Новое правило ...».

  • Тип правила - «Пользовательский».
  • Программа: Службы-> Настроить ...-> Применить только к службам. (Хотя IIS Express не является службой, но мультиплексор HTTP, который он использует, есть).
  • Протокол TCP
  • Конкретные порты: перечислите все порты для всех ваших привязок IIS Express. Вы можете вернуться к этому правилу и добавить порты в любое время. (Если это становится утомительным, вы можете добавить диапазон, например, 40000-65534который охватывает весь диапазон, используемый Visual Studio, но имейте в виду, что это менее безопасно).
  • Действие - «Разрешить соединение».
  • Профиль будет одним из следующих. Если сомневаетесь, выберите «Домен + частный».
    • "Домен", если у вас корпоративный рабочий стол и он будет работать только в локальном домене.
    • «Домен + частный». Если у вас частная машина для разработки в некорпоративной среде, или корпоративный ноутбук, который также должен работать из дома.
    • «Домен, частный и общедоступный», если вам нужно проводить демонстрации в не частных сетях.
  • Имя должно иметь вид «IIS Express Dev Server».
викомалл
источник
12
@ user578913 Итак, я наконец нашел правильный файл applicationhost.config, открыв работающую панель задач IIS Express и щелкнув по ней, а затем по ссылке на файл конфигурации. Я установил порт на 1063 во второй строке, так как это было то, что было установлено в первой строке. Запустил командную строку, и все выглядело нормально. Когда я перехожу к имени машины или имени машины: 1063 с другой машины в сети, я все равно ничего не получаю.
snumpy
15
хорошо, поскольку Visual Studio назначает порт (отличный от 8080), брандмауэр Windows блокировал его. После отключения брандмауэра Windows (я мог бы просто открыть порт, но я нахожусь в защищенной сети) и использования IP-адреса моей машины, а не имени машины, это сработало. Спасибо. Я бы проголосовал за, но еще не получил репутации = (
snumpy
3
Да, если брандмауэр Windows должен быть включен, вы явно добавляете TCP-порт 8080 (или тот, который используете). В Windows 7 я изначально пытался назначить порт для «IIS Express Worker Process». Но не вышло. Мне пришлось использовать опцию «Новое правило» и разрешить порт 8080. Выбор профиля (Домен, Частный, Публичный) также важен.
Gautam Jain
2
Примечание для себя: если вы получили отказ в доступе, запустите Visual Studio от имени администратора .
nVentimiglia
3
Начиная с VS2015, расположение файла C:\<Path\To\Solution>\.vs\config\applicationhost.config. (Спасибо, @Talon)
snumpy
29

Я потратил несколько часов на эту проблему, пытаясь перейти со своего Android Xoom на мою машину разработчика win7, чтобы я мог протестировать новое веб-приложение asp.net, которое я создал. Все, что я сделал, это изменил файл applicationhost.config IISExpress с использования HostName ПК на текущий IP-адрес ПК для моего нового сайта.

<binding protocol="http" bindingInformation="*:80:dev-Lee" />

к

<binding protocol="http" bindingInformation="*:80:192.168.1.102" /> 

Как только я сделал это и перезапустил IISExpress ... Я смог перейти на свою машину dev-Lee и увидеть свое приложение из моего Xoom!

Лестер39
источник
10
Все, что я получаю со всеми этими решениями, - это ошибка 400 - неверный запрос. Какие-либо предложения?
Krumelur
2
@Krumelur, убедитесь, что вы редактируете правильный файл applicationhost.config. тот, что находится в папке «Мои документы».
Codler
14

Мы можем добавить несколько адресов привязки, отредактировав applicationhost.config IIS Express.

<bindings>
   <binding protocol="http" bindingInformation="*:62217:localhost" />
   <binding protocol="http" bindingInformation="*:62217:192.168.0.5" />
   <binding protocol="http" bindingInformation="*:62218:192.168.0.5" />
</bindings>

Теперь мы можем получить доступ к веб-сайту из локальной сети, используя IP-адрес.

Доступ к локальным сайтам из локальной сети с помощью IIS Express

Насир Махмуд
источник
6

Visual Studio 2013 с пакетом обновления 1 (SP1) и выше (2015) включает параметр «Применить настройки сервера ко всем пользователям (сохранить в файле проекта)». По умолчанию это включено. Если этот параметр включен, Visual Studio запускает IIS Express с аргументами командной строки, которые заставляют его использовать другой файл конфигурации. Расположение файла applicationhost.config находится в каталоге проекта в .vs \ config.

Джон Элдридж
источник
1
Да, это была проблема в моем случае - я пытался отредактировать неверный файл. Как это бывает, вы можете увидеть, где находится конфигурация вашего приложения IIS Express, щелкнув значок в трее, перечислив все приложения и выбрав свой. Путь к файлу конфигурации будет написан ниже. Мой был в .vs \ config
evilkos 04
1
Да, то же самое для меня. Большое спасибо.
Vas
2

Мы сделали бесплатное расширение VS (2012, 2013, 2015) под названием Conveyor, которое позволяет это - вы можете найти его через меню Tools-> Extensions ... в VS или на сайте галереи https://visualstudiogallery.msdn.microsoft. com / a429dbb7-a982-4541-b401-934375c02c0f? SRC = Home

Джим В. говорит, что нужно восстановить Монику
источник
1
Это великолепно, и его так легко настроить. Спасибо за работу!
Powellellogram
1

Если вы работаете с Visual Studio, выполните следующие действия, чтобы получить доступ к IIS-Express по IP-адресу:

  1. Получите IP-адрес вашего хоста: ipconfigв командной строке Windows
  2. Перейти к $ (SolutionDir) .vs \ config \ applicationHost.config
  3. найти
    <site name="WebApplication3" id="2"> <application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="C:\Users\user.name\Source\Repos\protoype-one\WebApplication3" /> </application> <bindings> <binding protocol="http" bindingInformation="*:62549:localhost" /> </bindings> </site>
  4. Добавьте: <binding protocol="http" bindingInformation="*:62549:192.168.178.108"/>
    с вашим IP-адресом
  5. Запустите Visual Studio с правами администратора, и все должно работать
  6. Возможно, поищите проблемы с брандмауэром, если вы попытаетесь подключиться удаленно.

Подсказка в том, что у Visual Studio есть собственный файл applicationHost.config!

Даниэль Айзенрайх
источник
0

У меня было много проблем с тем, чтобы заставить это работать из Visual Studio 2012, я перешел с 404 ошибок на 503. В конце концов, что сработало для меня, это стереть всю связанную конфигурацию в конфигурации IIS Express ...

"\Program Files (x86)\IIS Express\appcmd.exe" list site
"\Program Files (x86)\IIS Express\appcmd.exe" delete site xxx
"\Program Files (x86)\IIS Express\appcmd.exe" delete site yyy

Затем я создал новый виртуальный каталог на странице свойств в моем веб-проекте в VS, но перед тем, как создать виртуальный каталог, я изменил имя хоста на http: // myhost: 80 /, затем нажал кнопку создания виртуального каталога. Раньше я получал сообщение об ошибке, в котором говорилось, что имя хоста должно быть «localhost», но на этот раз этого не произошло. И после этого все заработало.

Короче говоря, сначала очистите существующую конфигурацию и начните снова.

Стю
источник
-2

Если ваш внешний домен - «name.mydyndns.com», вам необходимо написать:

<binding protocol="http" bindingInformation="*:name.mydyndns.com" />

Это работает на Windows 2003 Server и IIS 7.5 Express.

Хуан
источник
-3

Скриншот

в пуле приложений в IIS установите для параметра «Включить 32-разрядные приложения» значение «true».

Мюрсель Йылдырым
источник
Не уверен, что это действительно решает вопрос. Вы хотели опубликовать это по другому вопросу?
ckittel