Как включить внешний запрос в IIS Express?
Как включить удаленные запросы в IIS Express? Скотт Гатри написал, что это возможно, но не сказал как.
27 ответов
На сайте группы 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)
Вам может потребоваться внести три изменения.
- Скажите IIS Express, чтобы он связывался со всеми ip-адресами и именами хостов. В вашем
.config
файл. Как правило:- VS 2015:
$(solutionDir)\.vs\config\applicationhost.config
%userprofile%\My Documents\IISExpress\config\applicationhost.config
- VS 2015:
Найдите обязательный элемент вашего сайта и добавьте
<binding protocol="http" bindingInformation="*:8080:*" />
- Установите бит Windows под названием "http.sys". Как администратор, запустите команду:
netsh http add urlacl url=http://*:8080/ user=everyone
куда everyone
это группа окон. Используйте двойные кавычки для групп с пробелами типа "Tout le monde".
Разрешить IIS Express через брандмауэр Windows.
Пуск / Брандмауэр Windows в режиме повышенной безопасности / Входящие правила / Новое правило...
программа
%ProgramFiles%\IIS Express\iisexpress.exe
ИЛИ Порт 8080 TCP
Теперь, когда вы начинаете iisexpress.exe
Вы должны увидеть сообщение, такое как
Успешно зарегистрированный URL "http://*:8080/" для сайта "hello world" application "/"
У меня ничего не получалось, пока я не нашел iisexpress-прокси.
Откройте командную строку как администратор, затем запустите
npm install -g iisexpress-proxy
затем
iisexpress-proxy 51123 to 81
при условии, что ваш проект Visual Studio открывается на localhost:51123, и вы хотите получить доступ по внешнему IP-адресу xxxx:81
Изменить: просто упомянуть, что он отлично работает с noip.com
Я помню, что сталкивался с такими же проблемами, пытаясь использовать этот рабочий процесс несколько месяцев назад.
Именно поэтому я написал простую прокси-утилиту специально для такого сценария: 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/.
В большинстве случаев проще, лучше.
Если вы работаете с Visual Studio, выполните следующие действия, чтобы получить доступ к IIS-Express через IP-адрес:
- Получите IP-адрес вашего хоста:
ipconfig
в командной строке Windows Идти к
$(SolutionDir)\.vs\config\applicationHost.config
найти
<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>
Добавлять:
<binding protocol="http" bindingInformation="*:62549:192.168.178.108"/>
с вашего IP-адреса- Запустите Visual Studio с правами администратора, и все должно работать
- Может быть, искать некоторые проблемы с брандмауэром, если вы пытаетесь подключиться с удаленного
В качестве ссылки на это:
netsh http add urlacl url=http://vaidesg:8080/ user=everyone
Это будет работать только на английских версиях Windows. Если вы используете локализованную версию, вы должны заменить "всех" чем-то другим, например:
- "Iedereen" при использовании голландской версии
- "Jeder" при использовании немецкой версии
- "Минденьки" при использовании венгерской версии
В противном случае вы получите ошибку (Ошибка создания SDDL, Ошибка: 1332)
Хороший ресурс - Работать с SSL во время разработки проще с IISExpress Скотта Хансельмана.
Вам нужен раздел IIS Express для внешнего обслуживания через порт 80
Я решил это с помощью установки "Конвейер по Keyoti" в Visual Studio Professional 2015. Конвейер сгенерировал УДАЛЕННЫЙ адрес (ваш IP) с портом (45455), который разрешает внешний запрос. Пример:
Конвейер позволяет тестировать веб-приложения с внешних планшетов и телефонов в сети или с эмуляторов Android (без http://10.0.2.2:<hostport>
)
Шаги находятся по следующей ссылке:
https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti
Объединив ответы в этой теме, я исправил это (Visual Studio 2019) следующим образом:
Запустите Visual Studio от имени администратора и запустите веб-службу, как обычно.
Найдите значок IIS Express на панели задач, щелкните его правой кнопкой мыши и выберите "Показать все приложения".
Выберите свою веб-службу и обратите внимание на путь конфигурации, показанный ниже. Щелкните файл конфигурации, чтобы открыть его для редактирования.
Найдите свою веб-службу (например, найдите свой порт) в этом файле конфигурации, затем найдите такую строку:
*
:yourport: localhostДобавьте после этого новую строку, например:
:
ваш порт:*
В этом случае нет необходимости создавать привязки с конкретным IP-адресом, который может измениться в будущем.
Надеюсь, это кому-то поможет.
Это то, что я сделал для 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 не запускается от имени администратора, это, вероятно, завершится ошибкой. Теперь все должно работать.
Что мне помогло, так это щелкнув правой кнопкой мыши значок "IISExpress", "Показать все приложения". Затем выбрав веб-сайт, я увидел, какой aplicationhost.config он использует, и исправление прошло отлично.
Если вы попробовали ответ полковника Паника, но не работаете в Visual Studio, попробуйте следующее:
Добавить другой <binding />
в вашем конфиге IIS Express
<bindings>
<binding protocol="http" bindingInformation="*:8080:localhost" />
<binding protocol="http" bindingInformation="*:8080:hostname" />
</bindings>
Наконец, вы должны запустить Visual Studio от имени администратора
Самый простой и крутой способ, который я нашел, - это использовать (установка занимает 2 минуты):
Это будет работать с чем-либо, работающим на localhost. Просто зарегистрируйтесь, запустите небольшую исполняемую программу, и все, что вы запускаете на локальном хосте, получит общедоступный URL, к которому вы можете получить доступ из любого места
Это хорошо для показа материала вашим удаленным товарищам по команде, не тратя время на настройку IIS или брандмауэры. Хотите остановить доступ, просто прервите исполняемый файл.
ngrok authtoken xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ngrok http -host-header=localhost 89230
при условии, что 89230 является вашим портом IIS Express
Вы также можете запустить несколько портов даже на бесплатном плане
Принятым ответом на этот вопрос является руководство по настройке IIS Express для работы с веб-матрицей. Я нашел это руководство более полезным при попытке заставить его работать с VS 2010.
Я просто выполнил шаги 3 и 4 (запустил IIS Express от имени администратора) и мне пришлось временно отключить брандмауэр, чтобы он заработал.
Вы можете попытаться настроить переадресацию портов вместо того, чтобы изменять конфигурацию 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
Надеюсь, поможет.
Другой способ доступа к внешним запросам - использовать IIS вместо IIS Express. В моей визуальной студии я могу легко переключаться.
У меня есть некоторые проблемы с использованием IIS Express в Win 8.1 и внешним запросом.
Я выполняю следующие шаги для отладки внешнего запроса:
- Установите IIS
- Настройте Visual Studio для использования локального IIS (свойства страницы в вашем веб-проекте)
- Создать эксклюзивный AppPool в IIS для работы с моим приложением
- В моем проекте я использую Oracle Client и должен быть 32-битным (64-битные не работают с Visual Studio), тогда мне нужно разрешить 32-битный в пуле приложений
- Настройте брандмауэр Windows для разрешения запроса в порту 80 (входящие правила)
Работает!
У меня был включен локальный 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 напрямую (который затем разрешает удаленные подключения), но, в свою очередь, вы всегда должны запускать его как администратор... Мне это не нравится.
Если вы запускаете Visual Studio из Admin, вы можете добавить только
<binding protocol="http" bindingInformation="*:8080:*" />
или же
<binding protocol="https" bindingInformation="*:8443:*" />
в
%userprofile%\My Documents\IISExpress\config\applicationhost.config
Для меня это относительно просто и понятно:
Загрузите расширение Visual Studio, выполнив поиск по запросу "Конвейер" в диалоговом окне "Расширения". Тогда просто установите.
форма:https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti
Я решил эту проблему, используя метод обратного прокси.
Я установил wamp-сервер и использовал простую функцию обратного прокси веб-сервера apache.
Я добавил новый порт для прослушивания веб-сервера Apache (8081). Затем я добавил конфигурацию прокси как виртуальный хост для этого порта.
<VirtualHost *:8081>
ProxyPass / http://localhost:46935/
ProxyPassReverse / http://localhost:46935/
</VirtualHost>
Я сделал все эти шаги, и ничто не помогло мне. И что мне нужно, это просто запустить мое приложение через IIS Express...
Надеюсь, поможет.
Я сделал следующее и смог подключиться:
1) изменена привязка конфигурации IIS Express с локального хоста на '*'
протокол привязки = "http" bindingInformation = "*: 8888: *"
2) Определено входящее правило на брандмауэре, чтобы разрешить определенный порт для типа протокола: tcp
3) Добавьте следующую команду для добавления конфигурации сети для вашего порта: netsh http add urlacl url=http://*:8888/ user=each
Мне не удалось обслуживать запросы iis другим пользователям в моей локальной сети, все, что мне нужно было сделать (в дополнение к вышеупомянутому), это перезапустить мой маршрутизатор BT Hub.
Что помогло мне в моем проекте dotnet core 6 разрешить удаленный доступ к моему серверу IIS, так это настроить параметр проекта «applicationUrl» в [каталог решения]/Properties/launchSettings.json, изменив значение с «http://localhost:5000». " на "http://0.0.0.0:5000"
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:20845",
"sslPort": 0
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"MyLittleProject": {
"commandName": "Project",
"dotnetRunMessages": "true",
"launchBrowser": true,
"applicationUrl": "http://0.0.0.0:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
Но также важно правильно настроить брандмауэр, чтобы разрешить доступ к TCP-порту сервера: в моем случае было добавлено входящее правило для TCP-порта 5000, разрешающее соединения.
Это безумно круто и даже покрывает 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.
[диалог свойств проекта]
Для разработки с использованием VisualStudio 2017 и NetCore API-проекта:
1) В Cmd-Box: ipconfig /all для определения IP-адреса
2a) Введите полученный IP-адрес в Свойства проекта -> вкладка "Отладка".
2b) Выберите порт и присоедините его к IP-адресу из шага 2a.
3) Добавьте разрешающее правило в брандмауэр, чтобы разрешить входящий TCP-трафик на выбранный порт (мой брандмауэр вызвал диалоговое окно: "Заблокировать или добавить правило в брандмауэр"). Добавить будет в этом случае сделать свое дело.
Недостаток решения выше:
1) Если вы используете динамический IP-адрес, вам нужно повторить шаги, описанные выше, в случае, если был назначен другой IP-адрес.
2) У вашего сервера теперь есть открытый порт, который вы можете забыть, но этот открытый порт остается приглашением для нежелательных гостей.