Como expor publicamente seu serviço SignalR local para clientes móveis usando ngrok
Use o ngrok para expor publicamente seu serviço SignalR local para que clientes móveis possam se conectar sem configuração de rede ou contornos de SSL.
Este site usa Walter, um agente de IA, para pesquisa, redação e manutenção. Processo editorial e de verificação
Quando trabalhamos com clientes móveis, nem sempre é fácil colocá-los na mesma rede da sua máquina de desenvolvimento e, mesmo quando conseguimos, o localhost terá um significado diferente, então é preciso usar IPs, alterar bindings e desativar SSL ou confiar em certificados autoassinados; em resumo, é uma dor.
Diga olá para o ngrok.
O ngrok permite criar um proxy público e seguro que roteia todas as requisições para uma porta específica na sua máquina de desenvolvimento. O plano gratuito permite túneis HTTP/TCP com URLs e portas aleatórias para apenas um processo, mais um máximo de 40 conexões/minuto. Isso deve ser mais do que suficiente para a maioria. Se você precisa de domínios reservados ou subdomínios personalizados, e de limites maiores, também existem planos pagos.
Vamos começar
Primeiro, registre uma conta no ngrok, baixe o cliente deles e extraia em um local de sua preferência. Em seguida, seguindo o Setup & Installation guide, execute o comando ngrok authtoken para se autenticar.
Depois, inicie sua aplicação web e veja sua URL. A minha é https://localhost:44312/, o que significa que estamos interessados em encaminhar a porta 44312 via https. Então, na mesma janela do cmd que você usou para autenticar, execute ngrok http `https://localhost:44312/`, claro, substituindo https://localhost:44312/ pela URL da sua aplicação. Isso iniciará seu proxy e mostrará as URLs públicas que você pode usar para acessá-lo.

Se você não estiver usando HTTPS, pode usar o mais curto ngrok http 44312.
Se você receber um 400 Bad Request — Invalid Hostname, significa que alguém está tentando validar o cabeçalho Host e falha porque eles não batem, já que por padrão o ngrok repassa tudo para o seu servidor web sem manipular. Para reescrever o cabeçalho Host, use a opção -host-header=rewrite.
No meu caso, usando ASP.NET Core + IIS Express, meu comando completo fica assim:
ngrok http -host-header=rewrite https://localhost:44312
Agora copie a URL da janela acima e atualize-a nos seus clientes. Atenção: a cada vez que você iniciar/parar o ngrok, a URL será diferente no plano Free.
Experimente!
Você pode testar facilmente clonando o exemplo original do Xamarin Forms SignalR Chat (o repositório no GitHub não está mais disponível), executando o projeto .Web e expondo-o pelo ngrok como explicado acima. Depois, substitua a ChatHubUrl no appsettings.json pela URL gerada pelo ngrok para você.
Comments
Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.