Как включить внешний запрос в IIS Express?

466

Как включить удаленные запросы в IIS Express? Скотт Гатри написал, что это возможно, но не сказал как.

TedTel
источник
25
Для этого есть бесплатное расширение VS, которое мы написали visualstudiogallery.msdn.microsoft.com/…
Джим В. говорит, что восстановите Монику
@ JimW Джим, ты создатель плагина? Не могли бы вы объяснить, как работает это чудо разработки программного обеспечения?
Ян Уорбертон
@IanWarburton спасибо, что назвали это чудом! Это обратный прокси-сервер.
Джим В. говорит восстановить Монику
@JimW Спасибо за создание.
Ян Уорбертон
@JimW Я попробовал твой плагин и делаю все как ты сказал в уроке. Но я все еще не могу получить доступ к своему локальному хосту
mark_spencer

Ответы:

403

На сайте группы IIS есть пост в блоге, в котором объясняется, как включить удаленные подключения в IIS Express . Вот подходящая часть этого поста:

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

netsh http add urlacl url=http://vaidesg:8080/ user=everyone

Для XP сначала установите средства поддержки Windows XP с пакетом обновления 2 (SP2). Затем выполните следующую команду из административного запроса:

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

Дэмиан Эдвардс
источник
121
В случае ошибки 503, смотрите это: stackoverflow.com/questions/5442551/…
deerchao
5
Есть ли netshкоманда, позволяющая подключаться к любому имени хоста?
полковник Паник
33
Для справки: если у вас Windows-машина не на английском языке, параметр user={PARAM_USER}будет на вашем родном языке.
GoRoS
7
Использование подстановочных знаков в параметре url (например, url = http: // *: 8080 /) заставит соединения работать как для имени хоста, так и для IP-адреса компьютера.
Андерс
2
В случае сбоя команды (вероятно, ошибка 1789) учтите, что команда ожидает пользователя на языке вашего компьютера. Так что, если ваш компьютер, например, на португальском, используйте user=todosвместо user=everyone.
Витор Канова
350

Вам может потребоваться внести три изменения.

  1. Скажите IIS Express, чтобы он связывался со всеми ip-адресами и именами хостов. В вашем .configфайле. Как правило:
    • VS 2015: $(solutionDir)\.vs\config\applicationhost.config
    • <VS 2015: %userprofile%\My Documents\IISExpress\config\applicationhost.config

Найдите обязательный элемент вашего сайта и добавьте

    <binding protocol="http" bindingInformation="*:8080:*" />
  1. Установите бит Windows под названием «http.sys». Как администратор, запустите команду:
    netsh http add urlacl url=http://*:8080/ user=everyone

Где everyoneгруппа окон. Используйте двойные кавычки для групп с пробелами типа "Tout le monde".

  1. Разрешить IIS Express через брандмауэр Windows.

    Пуск / Брандмауэр Windows в режиме повышенной безопасности / Входящие правила / Новое правило ...

    Программа %ProgramFiles%\IIS Express\iisexpress.exe
    ИЛИ Порт 8080 TCP

Теперь, когда вы начинаете, iisexpress.exeвы должны увидеть сообщение, такое как

Успешно зарегистрированный URL "http: // *: 8080 /" для сайта "hello world" application "/"

Полковник паника
источник
22
NB Если вы работаете в локализованной версии Windows , параметр users=everyoneдля netsh(второй этап) может вызвать ошибку 1789. Решение заключается в преобразовании everyoneк соответствующему имени группы на вашем языке.
Мфлодин
5
Как вы получаете проект Visual Studio, чтобы принять эту привязку? В свойствах проекта, где вы указываете Project Url, если я ввожу звездочку для имени хоста, это выдает ошибку. Если я ввожу что-нибудь еще, он пытается создать новый виртуальный каталог. Он не ссылается на запись в application.config.
Тревор Эллиотт
20
Чтобы это работало в Visual Studio, вы должны использовать имя хоста вашего компьютера на шаге 1 bindingInformation="*:8080:hostname"и на шаге 2 url=http://hostname:8080/, а в свойствах вашего веб-проекта Visual Studio на вкладке Web установите для Project Url значение http://hostname:8080/. Удалите *urlacl, если вы его уже создали; это не сработает, если у вас есть оба. Наконец, URL, по которому вы переходите в своем веб-браузере, должен указывать имя хоста, а не localhost.
Джо Дейли
5
Мне также нужно было иметь строку localhost в элементе bindings, иначе Visual Studio 2013 попытался создать дублирующую запись сайта. Например:<binding protocol="http" bindingInformation="*:8080:localhost" />
Кристианп
3
Мне также нужно было запустить Visual Studio от имени администратора, но этот ответ был самым тщательным.
Dlsso
127

Я помню, что сталкивался с такими же проблемами при попытке этого рабочего процесса несколько месяцев назад.

Вот почему я написал простую прокси-утилиту специально для такого сценария: https://github.com/icflorescu/iisexpress-proxy .

С помощью IIS Express Proxy все становится довольно просто - не нужно «netsh http add urlacl urlcl = vaidesg: 8080 / user = Everyone» или связываться с вашим «applicationhost.config».

Просто введите это в командной строке:

iisexpress-proxy 8080 to 3000

… А затем вы можете указать свои удаленные устройства на http: // vaidesg: 3000 .

В большинстве случаев проще, лучше.

Ионут-Кристиан Флореску
источник
3
Спасибо за отличное решение!
Лето
1
И я могу добавить, что подобные решения Node.js являются единственными, которые надежно работают в Azure, поскольку Azure создает автоматически генерируемый файл applicationhost.config и удаляет изменения привязки.
TheHansinator
1
Я начал использовать IIS Express Proxy на своем Mac вместе с ngrok после того, как ngrok не работал должным образом (потому что я не выполнял необходимые манипуляции с конфигурацией IIS Express). Очень кстати! Спасибо.
codingoutloud
1
Это, безусловно, самое простое решение. Я предпочитаю не связываться с applicationhost.config, если мне не нужно.
скальпин
4
Отличное решение! Теперь, чтобы вернуться и исправить беспорядок, который я сделал с моим IIS Express.
Митч Стюарт
123

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

Откройте командную строку как администратор, затем запустите

npm install -g iisexpress-proxy

тогда

iisexpress-proxy 51123 to 81

при условии, что ваш проект Visual Studio открывается на localhost: 51123 и вы хотите получить доступ по внешнему IP-адресу xxxx: 81

Изменить: я в настоящее время использую ngrok

Инструментарий
источник
7
безболезненное решение
Бахадир
4
Самое простое решение, которое я мог найти. Вероятно, следует переименовать пакет во что-то вроде веб-прокси, так как вы можете использовать его не только для пересылки iisexpress :)
Mario Tacke
8
@xgp - Привет, я автор iisexpress-proxy :-) В конце концов вам удалось заставить его работать на вас? Вы должны закрыть и снова открыть командную строку, или в редких случаях перезапустить ОС. Напишите мне на странице проекта ( github.com/icflorescu/iisexpress-proxy ), если у вас есть дополнительные вопросы, и я постараюсь помочь, если у меня будет время.
Ионут-Кристиан Флореску
1
Спасибо всем за использование и за ваши добрые слова :-). @MarioTacke - да, я знаю, но все больше людей могут найти его, просто используя Google, если он называется iisexpress-proxy :-)
Ionut-Cristian Florescu
1
Кстати, это не работает с аутентификацией Windows.
Том
35

В качестве ссылки на это:

netsh http add urlacl url=http://vaidesg:8080/ user=everyone

Это будет работать только на английских версиях Windows. Если вы используете локализованную версию, вы должны заменить «всех» чем-то другим, например:

  • «Iedereen» при использовании голландской версии
  • «Jeder» при использовании немецкой версии
  • «Минденьки» при использовании венгерской версии

В противном случае вы получите ошибку (Ошибка создания SDDL, Ошибка: 1332)

Breez
источник
33

Хороший ресурс - Работать с SSL во время разработки проще с IISExpress Скотта .

То, что вам нужно, это раздел Настройка IIS Express для внешнего обслуживания через порт 80

Люк Сэмпсон
источник
В этой записи блога рекомендуется изолировать порт 80 для «IISExpressWeb.exe». В текущей версии IIS Express отсутствует exe-имя этого имени - есть только IISExpress.exe и IISExpressTray.exe. Изоляция подключений к любому из них предотвращает подключение извне; устранение ограничения процесса позволяет подключаться. Какой правильный .exe для цели?
Крис Москини
33

Если вы работаете с 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. Может быть, искать некоторые проблемы с брандмауэром, если вы пытаетесь подключиться с удаленного
Даниэль Эйзенрайх
источник
20

Я решил это с помощью установки «Конвейер по Keyoti» в Visual Studio Professional 2015. Конвейер сгенерировал УДАЛЕННЫЙ адрес (ваш IP) с портом (45455), который разрешает внешний запрос. Пример:

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

Конвейер позволяет тестировать веб-приложения с внешних планшетов и телефонов в сети или с эмуляторов Android (без http://10.0.2.2:<hostport>)

Шаги в следующей ссылке:

https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti

Ронни Моран
источник
@kilianeller, пожалуйста, перейдите по ссылке в ответе и задайте вопрос, мы поможем вам.
Джим В. говорит восстановить Монику
Workst !!, я докажу все другие решения (изменить applicationhost.config, netsh, адрес IPv6 ..) и ничего, но установка этого наконец работает, единственная небольшая проблема заключалась в том, что неверно направил IP-адрес, но не серьезная проблема.
Ion
Действительно прост в установке. Просто убедитесь, что вы добавили сертификат в удаленный браузер, как указано на странице расширения.
Андрес
Я не могу в это поверить, это работает !!! ТАК ПРОСТО, ТАК ЭЛЕГАНТНО !!! Последние 5 часов я потратил только на поиски пустых решений и, наконец, нашел это!
Ziggy192
10

Если вы пробовали ответ полковника Паника но не работаете в Visual Studio, попробуйте следующее:

Добавьте еще один <binding />в вашем конфиге IIS Express

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

Наконец, вы должны запустить Visual Studio от имени администратора

Брюс
источник
К сожалению, это, похоже, не работает для меня .. Я все еще получаю отказано в соединении, когда я пытаюсь получить доступ к своему локальному IP-
Thomas Teilmann
@ThomasTeilmann, в Visual Studio мне пришлось открыть свойства веб-приложения и на вкладке «Веб» изменить «URL проекта», чтобы использовать альтернативное имя хоста вместо localhost.
Сэм
@ThomasTeilmann, О, и я думаю, что вам нужно просматривать его по имени хоста, а не по IP.
Сэм
Вообще-
Это был ответ для меня (т.е. запустить VS от имени администратора) - спасибо @Bruce. Кроме того, мне также пришлось вручную исправить настройки брандмауэра. В моем случае (т. Е. Тестирование того, что мой iphone может просматривать мою машину разработки) открытие порта 8080 на брандмауэре не работает (а?), Но открывает доступ по ip (т. Е. Scope> Local IPs = 10.0.0.0/24 = мой дом сеть) сделал свое дело.
Илан
9

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

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

Эммануэль
источник
2
Этот ответ указал мне на другое решение, отредактировав applicationhost.config для принятия : 55665: вместо *: 55665: localhost
Deko
Спасибо @Deko - ваш комментарий в сочетании с командой netsh, упомянутой в нескольких других ответах, помог мне сработать.
Марсель Попеску
8

Это то, что я сделал для Windows 10 с Visual Studio 2015, чтобы включить удаленный доступ, как с http, так и с https:

Первый шаг - привязать ваше приложение к вашему внутреннему IP-адресу. Запустите cmd->, ipconfigчтобы получить адрес. Откройте файл /{project folder}/.vs/config/applicationhost.configи прокрутите вниз, пока не найдете что-то вроде этого:

<site name="Project.Web" id="2">
    <application path="/">
        <virtualDirectory path="/" physicalPath="C:\Project\Project.Web" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:12345:localhost" />
    </bindings>
</site>

Добавьте две новые привязки под bindings. Вы также можете использовать HTTPS, если вам нравится:

<binding protocol="http" bindingInformation="*:12345:192.168.1.15" />
<binding protocol="https" bindingInformation="*:44300:192.168.1.15" />

Добавьте следующее правило в брандмауэр, откройте новое cmdприглашение от имени администратора и выполните следующие команды:

netsh advfirewall firewall add rule name="IISExpressWeb" dir=in protocol=tcp localport=12345 profile=private remoteip=localsubnet action=allow

netsh advfirewall firewall add rule name="IISExpressWebHttps" dir=in protocol=tcp localport=44300 profile=private remoteip=localsubnet action=allow

Теперь запустите Visual Studio как Administrator. Щелкните правой кнопкой мыши файл проекта веб-проектов и выберите Properties. Перейдите на Webвкладку и нажмите Create Virtual Directory. Если Visual Studio не запускается от имени администратора, это, вероятно, завершится ошибкой. Теперь все должно работать.

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

Ogglas
источник
Работал на меня! :) Здесь также есть хороший пост: blog.kloud.com.au/2017/02/27/…
Лениэль Маккаферри,
Я пробовал все остальное, включая ngrok, но безрезультатно. Это сработало с первой попытки.
kooldave98
5

Принятым ответом на этот вопрос является руководство по настройке IIS Express для работы с веб-матрицей. Я нашел это руководство более полезным при попытке заставить его работать с VS 2010.

Я просто выполнил шаги 3 и 4 (запустил IIS Express от имени администратора) и мне пришлось временно отключить брандмауэр, чтобы он заработал.

Чад
источник
Команды, на которые вы ссылаетесь, теряют возможность отладки в Visual Studio, что, по крайней мере, на мой взгляд, делает их бессмысленными - использование IIS или любого другого удаленного сервера будет таким же хорошим или лучшим (поскольку вы можете настроить удаленную отладку по крайней мере на IIS). Если бы IIS Express не требовал прав администратора для запуска без localhost, это бы сработало. Очень назойливый.
Крис Москини
Это именно то, что я искал - спасибо! Я использую IIS Express с Visual Studio 2010 и собирался протестировать приложение ASP.NET MVC3 в своей локальной сети, и это было то, что мне было нужно, чтобы это работало :)
Lasse Christiansen
5

Вы можете попытаться настроить переадресацию портов вместо того, чтобы изменять конфигурацию IIS Express, добавлять новые правила HTTP.sys или запускать Visual Studio от имени администратора.

По сути, вам нужно перенаправить IP:PORTваш веб-сайт на другой свободный порт вашей машины, но не на локальный хост, а на внешний сетевой адаптер.

Дело в том, что IIS Express (по крайней мере, в Windows 10) привязывается к [::1]:portзначению, что он прослушивает порт IPv6. Вы должны принять это во внимание.

Вот как я сделал эту работу - http://programmingflow.com/2017/02/25/iis-express-on-external-ip.html

Надеюсь, поможет.

srmrco
источник
Я использую Windows 10 и привязка localhost к IPv6 была ключевой. Спасибо!
TomaszGuzialek
Компьютер, который я пытался настроить, имел другой локальный адрес. Он был назван "местный разработчик". Мне нужно было просто добавить привязку v4tov6 listenport = 3000 connectaddress = local-dev connectport = 60000, чтобы все заработало. Отличный пост, спасибо!
Аника
4

Самый простой и крутой способ, который я нашел, - это использовать (установка занимает 2 минуты):

https://ngrok.com/

Это будет работать с чем-либо, работающим на localhost. Просто зарегистрируйтесь, запустите небольшую исполняемую программу, и все, что вы запускаете на локальном хосте, получит общедоступный URL, к которому вы можете получить доступ из любого места.

Это хорошо для демонстрации материала вашим удаленным товарищам по команде, не тратить время на настройку IIS или брандмауэры. Хотите остановить доступ, просто прервите исполняемый файл.

ngrok authtoken xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

ngrok http -host-header=localhost 89230

при условии, что 89230 является вашим портом IIS Express

Вы также можете запустить несколько портов даже на бесплатном плане

Артур Кендзиор
источник
1
Кто бы мог подумать, что мне придется прочитать столько ответов, пока я не
найду
3

У меня есть некоторые проблемы с использованием IIS Express в Win 8.1 и внешним запросом.

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

  1. Установите IIS
  2. Настройте Visual Studio для использования локального IIS (свойства страницы в вашем веб-проекте)
  3. Создать эксклюзивный AppPool в IIS для работы с моим приложением
  4. В моем проекте я использую Oracle Client и должен быть 32 бит (64 бит не работают с Visual Studio), тогда мне нужно разрешить 32 бит в пуле приложений
  5. Настройте брандмауэр Windows, чтобы разрешить запрос на порт 80 (входящие правила)

Работает!

Робсон Дуглас
источник
2

Если вы запускаете Visual Studio из Admin, вы можете добавить только

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

или

<binding protocol="https" bindingInformation="*:8443:*" />

в

%userprofile%\My Documents\IISExpress\config\applicationhost.config
Андрий
источник
1
Я применил эту конфигурацию, $(SolutionDir).vs\config\applicationHost.configа также мне пришлось открыть порт (8443) приложения в брандмауэре Windows.
Тонатио
2

У меня был включен локальный IIS, поэтому я просто создал правило перезаписи для моего порта отладки ... Я думаю, что это лучше и круче, чем другой метод, потому что его легче удалить после завершения разработки ... Вот как выглядит перезапись. ,

<rewrite>
    <rules>
        <rule name="ReverseProxyInboundRule1" stopProcessing="true">
            <match url="^dev/(.*)" />
            <action type="Rewrite" url="http://localhost:47039/{R:1}" />
        </rule>
    </rules>
</rewrite>

VS также позволяет вам разрабатывать, используя ваш локальный IIS напрямую (который затем разрешает удаленные подключения), но, в свою очередь, вы всегда должны запускать его как администратор ... Мне это не нравится.

konzo
источник
Это тоже мое любимое решение, спасибо :) Мне просто нужно было сначала включить Reverse Proxy для IIS, а затем добавить это правило в мой web.config.
Махди Гиаси
1

Я решил эту проблему, используя метод обратного прокси.

Я установил wamp-сервер и использовал простую функцию обратного прокси веб-сервера apache.

Я добавил новый порт для прослушивания веб-сервера Apache (8081). Затем я добавил конфигурацию прокси как виртуальный хост для этого порта.

<VirtualHost *:8081>
ProxyPass / http://localhost:46935/
ProxyPassReverse / http://localhost:46935/
</VirtualHost>
mustafacanturk
источник
1

Я сделал все эти шаги, и ничто не помогло мне. И что мне нужно, это просто запустить мое приложение через IIS Express ...

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

Надеюсь, поможет.

Максим Лабутин
источник
0

Я не смог обслуживать запросы iis другим пользователям в моей локальной сети, и все, что мне нужно было сделать (в дополнение к вышесказанному), это перезапустить мой маршрутизатор BT Hub.

Терри Кернан
источник
0

Это безумно круто и даже покрывает HTTPS красивыми доменными именами:

http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx

Действительно удивительные части, которые я не смог бы найти где-либо еще на SO, если указанная выше ссылка исчезнет:

> C:\Program Files (x86)\IIS Express>IisExpressAdminCmd.exe Usage:
> iisexpressadmincmd.exe <command> <parameters> Supported commands:
>       setupFriendlyHostnameUrl -url:<url>
>       deleteFriendlyHostnameUrl -url:<url>
>       setupUrl -url:<url>
>       deleteUrl -url:<url>
>       setupSslUrl -url:<url> -CertHash:<value>
>       setupSslUrl -url:<url> -UseSelfSigned
>       deleteSslUrl -url:<url>
> 
> Examples: 1) Configure "http.sys" and "hosts" file for friendly
> hostname "contoso": iisexpressadmincmd setupFriendlyHostnameUrl
> -url:http://contoso:80/ 2) Remove "http.sys" configuration and "hosts" file entry for the friendly  hostname "contoso": iisexpressadmincmd
> deleteFriendlyHostnameUrl -url:http://contoso:80/

Вышеуказанная утилита зарегистрирует сертификат SSL для вас! Если вы используете опцию -UseSelfSigned, это очень просто.

Если вы хотите сделать что-то сложное, неочевидная часть - вам нужно указать HTTP.SYS, какой сертификат использовать, например:

netsh http add sslcert ipport=0.0.0.0:443 appid={214124cd-d05b-4309-9af9-9caa44b2b74a} certhash=YOURCERTHASHHERE

Certhash - это «отпечаток», который вы можете получить из свойств сертификата в MMC.

eselk
источник
0

Я сделал следующее и смог подключиться:

1) изменена привязка конфигурации IIS Express с локального хоста на '*'

протокол привязки = "http" bindingInformation = "*: 8888: *"

2) Определено входящее правило на брандмауэре, чтобы разрешить определенный порт для типа протокола: tcp

3) Добавьте следующую команду для добавления конфигурации сети для вашего порта: netsh http add urlacl url = http: // *: 8888 / user = each

dhakalan
источник
Поскольку вы подходите к этому вопросу через 6 лет после того, как он был задан, и уже есть 12 других ответов, было бы лучше, если бы вы отредактировали свой ответ, чтобы объяснить, как ваш ответ работает лучше, чем остальные 12 (или, по крайней мере, как он это отличается).
Еретик Обезьяна
0

Другой способ получить доступ к внешним запросам - использовать IIS вместо IIS Express. В моей визуальной студии я могу легко переключаться.

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

PJ3
источник
Я использую VS2019.
PJ3
-1

[диалог свойств проекта]

Для разработки с использованием VisualStudio 2017 и API-проекта NetCore:

1) В Cmd-Box: ipconfig / all для определения IP-адреса

2a) Введите полученный IP-адрес в свойствах проекта -> вкладка «Отладка».

2b) Выберите порт и присоедините его к IP-адресу из шага 2a.

3) Добавьте правило разрешений в брандмауэр, чтобы разрешить входящий TCP-трафик на выбранный порт (мой брандмауэр вызвал диалоговое окно: «Заблокировать или добавить правило в брандмауэр»). Добавить будет в этом случае делать свое дело.

Недостаток решения выше:

1) Если вы используете динамический IP-адрес, вам необходимо повторить действия, описанные выше, в случае, если был назначен другой IP-адрес.

2) У вашего сервера теперь есть открытый порт, который вы можете забыть, но этот открытый порт остается приглашением для нежелательных гостей.

Пол Франке
источник