Start Debugging

Как публично выставить локальный сервис SignalR для мобильных клиентов с помощью ngrok

Используйте ngrok, чтобы публично выставить ваш локальный сервис SignalR и позволить мобильным клиентам подключаться без настройки сети и обходов SSL.

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

Поприветствуйте ngrok.

ngrok позволяет создать защищённый публичный прокси, который перенаправляет все запросы на конкретный порт вашей машины разработки. Бесплатный план разрешает HTTP/TCP-туннели на случайных URL и портах для одного процесса плюс не более 40 соединений в минуту. Для большинства этого более чем достаточно. Если нужны зарезервированные домены или собственные поддомены - и более высокие лимиты - есть платные планы.

Начнём

Сначала зарегистрируйтесь в ngrok, скачайте их клиент и распакуйте в удобное место. Затем, следуя Setup & Installation guide, выполните команду ngrok authtoken для аутентификации.

Далее запустите ваше веб-приложение и посмотрите его URL. У меня это https://localhost:44312/, значит нам нужно пробросить порт 44312 по https. В том же окне cmd, где вы аутентифицировались, выполните ngrok http `https://localhost:44312/`, конечно, заменив https://localhost:44312/ на URL вашего приложения. Это запустит прокси и покажет публичные URL, по которым к нему можно обратиться.

ngrok запускает публичный прокси на плане Free

Если вы не используете HTTPS, можно использовать более короткую команду ngrok http 44312.

Если вы получаете 400 Bad Request — Invalid Hostname, значит кто-то пытается проверить заголовок Host и не может, потому что значения не совпадают: по умолчанию ngrok передаёт всё на ваш веб-сервер без изменений. Чтобы переписать заголовок Host, используйте ключ -host-header=rewrite.

В моём случае - ASP.NET Core + IIS Express - полная команда выглядит так:

ngrok http -host-header=rewrite https://localhost:44312

Теперь скопируйте URL из окна выше и обновите его в клиентах. Учтите, что в плане Free при каждом запуске/остановке ngrok URL будет меняться.

Попробуйте!

Вы легко можете проверить это сами: клонировать оригинальный пример Xamarin Forms SignalR Chat (репозиторий на GitHub больше не доступен), запустить проект .Web и выставить его через ngrok, как описано выше. Затем замените ChatHubUrl в appsettings.json на ту, что сгенерировал для вас ngrok.

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< Назад