Удаленное тестирование приложения

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core

Последнее обновление: 20.08.2016

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

Для чего это может быть нужно? Это может быть нужно, если мы хотим протестировать наше приложение, запущенное на Visual Studio, из других устройств подсети. К примеру, я сделал мобильное приложение, которое обращается к моему же веб-приложению на ASP.NET. И мне надо протестировать взаимодействие между ними. Разворачивать полноценно веб-приложение на каком-то внешнем хостинге или локальном IIS только для этой цели не имеет смысла. И гораздо проще было бы запустить на Visual Studio веб-приложение и тут же его протестировать.

По умолчанию даже если мы запустим проект из Visual Studio на выполнение, и он запустится по какому-нибудь адресу типа http://localhost:xxxx, то на других устройствах, подключенных к одной подсети, он все равно будет не доступен. И чтобы сделать его доступным, необходимо выполнить ряд шагов. Рассмотрим два способа.

Первый способ

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

ipconfig in Windows 10

Здесь нас интересует IPv4-адрес, который в моем случае равен "192.168.1.18". То есть этот адрес компьютера в локальной сети.

Теперь надо настроить приложение, чтобы оно было доступно по этому адресу.

При создании проекта asp.net mvc 5 или asp net web api соответствующие данные о нем заносятся в специальный конфигурационный файл. При работе с VS 2013 этот файл находитя по пути C:\Users\[Имя Пользователя]\Documents\IISExpress\config\applicationhost.config. А при создании приложений в VS 2015 файл будет находиться на жестком диске в каталоге проекта по пути /{каталог проекта}/.vs/config/applicationhost.config.

Откроем нужный файл в зависимости от версии Visual Studio и найдем в нем узел, который устанавливает настройки для нашего проекта. Например, в моем случае проект называется XamarinService, и нужный мне узел в файле applicationhost.config будет выглядеть следующим образом:

<site name="XamarinService" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\Users\Eugene\Documents\Visual Studio 2015\Projects\ASPNETMVC5\XamarinService\XamarinService" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:57792:localhost" />
    </bindings>
</site>

В данном случае нас интересует узел bindings, который устанавливает привязку к определенному адресу. Добавим в него новый элемент binding, в котором будет указан наш локальный адрес в подсети:

<bindings>
    <binding protocol="http" bindingInformation="*:57792:localhost" />
    <binding protocol="http" bindingInformation="*:57792:192.168.1.18" />
</bindings>

Следующий шаг будет состоять в открытии портов для брандмауэра Windows. Для этого нужно запустить командную строку от имени администратора и последовательно ввести следующие команды:

netsh http add urlacl url=http://192.168.1.18:57792/ user=Все

Эта команда добавляет для утилиты http.sys необходимый адрес, по которому запускается приложение. В можем случае это адрес "http://192.168.1.18:57792/". Но естественно адрес и порт могут отличаться. Также следует отметить, что данный адрес становится доступным для всех пользователей. Для этого в конце команды идет вызов user=Все. "Все" - это группа пользователей. Но надо отметить, что данная часть команды будет отличаться для разных локализаций. Например, для англоязычной версии было бы:

netsh http add urlacl url=http://192.168.1.18:57792/ user=everyone

А для ОС на немецком языке

netsh http add urlacl url=http://192.168.1.18:57792/ user=Jeder

И после этого надо ввести вторую команду:

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

Эта команда добавляет к файерволлу Windows новое правило, которое разрешает все входящие подключения для порта 57792 (по которому в моем случае запускается приложение) для всех устройств из локальной подсети.

И после этой настройки мы можем обратиться к запущенному приложению с любого устройства в подсети, например, с подключенного через WI-FI смартфона:

Тестирование приложения ASP.NET MVC 5 из смартфона

Если в будущем возникнет необходимость удалить эти установки, то это можно сделать с помощью команды:

netsh http delete urlacl url=http://192.168.1.18:57792/

Второй способ

Второй способ заключается в применении специального пакета для NodeJS, который называется iisexpress-proxy. В этом случае нам не надо изменять файл applicationhost.config и добавлять исключения в файерволл Windows. Соответственно, гораздо меньше вероятности где-то ошибиться, однако при этом на целевом компьютере, на котором запускается веб-приложения, должен быть установлен NodeJS.

Для установки iisexpress-proxy выполним в командной строке следующую команду:

npm install -g iisexpress-proxy

Далее, чтобы указать перенаправление с локального порта на прокси-порт, нам надо выполнить команду: iisexpress-proxy [localPort] to [proxyPort]. localPort - это локальный порт нашего приложения, а proxyPort - это прокси-порт (от 1025 до 65535), по которому мы будем обращаться к приложению. Например, в моем случае это будет команда:

iisexpress-proxy 57792 to 3000

То есть все вызовы будут направляться с localhost:57792 на 192.168.1.18:3000.

При вводе этой команды может отобразиться окошко с призывом добавить исключение для файерволла:

iisexpress-proxy в ASP.NET MVC 5

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

iisexpress-proxy

При запуске указывается, по какому адресу будет доступно приложение. То есть теперь, чтобы обратиться к приложению с другого устройства подсети, я должен буду использовать адрес http://192.168.1.18:3000.

Чтобы прекратить проксирование, достаточно нажать на Ctrl-C.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850