Fala pessoal atualmente eu estou desenvolvendo aplicações REST em ASP.NET e tive que testar uma API desenvolvida em outra máquina. Por padrão, o IIS Express não permite conexões remotas e retorna o seginte erro “Bad Request – Invalid Host Name”. Scott Hanselman fez um post muito bem detalhado a esse respeito. No meu caso eu fiz algumas adaptações e nesse post, eu explico de uma forma mais resumida como habilitar o acesso externo ao IIS express.
1° Passo : Configurando o IIS Express
Normalmente quando você executa uma aplicação no IIS Express, ela pode ser acessada pela URL http://localhost:[numero_da_porta]. Para permitir o acesso externo à aplicações desenvolvidas no Visual Studio 2017, abra o arquivo localizado em <solution>/.vs/config/applicationhost.config, localize a tag <sites> → <site> → <bindings> → <binding ; e duplique a linha de “bindingInformation” contendo localhost adicionando um novo binding para o seu IP. Após as alterações seu arquivo deve ser similar ao trecho de código abaixo.
<sites> ... <site name="RestfulAPIWithAspNet" id="2"> <application path="/" applicationPool="Clr4IntegratedAppPool"> <virtualDirectory path="/" physicalPath="C:\Dev\Playground\Code\ASP_NET_Playground\RestfulAPIWithAspNet-v10\RestfulAPIWithAspNet" /> </application> <bindings> <binding protocol="http" bindingInformation="*:61533:localhost" /> <!-- Duplique essa linha e adicione um novo binding para o seu IP --> <binding protocol="http" bindingInformation="*:61533:192.168.2.2" /> </bindings> </site> ... </sites>
Devemos nos lembrar que não é uma boa prática versionar este arquivo.
2° Passo : Permitir Incoming Connections
Se você estiver executando em uma versão igual ou superior ao Windows 7, a maioria dos acessos externos são bloqueados por padrão, então você precisa dar permissão especificamente para as conexões recebidas por sua aplicação. Para fazer isso siga os passos abaixo:
Abra o PowerShell ou o prompt de comandos como “Administrador”;
Execute o comando abaixo:
netsh http add urlacl url=http://*:61533/ user=everyone
Obs: Você deve trocar o número da porta para o que a sua aplicação estiver usando. Além disso se você estiver instalado o Windows em português precisará mudar o user de everyone para todos.
netsh http add urlacl url=http://*:61533/ user=todos
Nesse passo possivelmente você já conseguiu desbloquear o acesso externo.
3° Passo : Configurar o Firewall
Se você chegou até aqui as coisas não estão muito boas, hehehe.
- Acesse o “Painel de Controle” e vá até “Firewall do Windows”
- Clique em “Configurações Avançadas”
- Selecione “Regras de Entrada”
- Clique em “Nova Regra…”
- Selecione “Porta” e clique em “Avançar”
- Defina a porta usada pelo IIS Express para sua aplicação e, clique em “Avançar”
- Selecione “Permitir a conexão”, clique em “Avançar”
- Verifique onde você gostaria de permitir a conexão ao IIS Express (Domínio, Particular, Público), clique em “Avançar”
- Defina o nome de sua regra e clique em “Concluir”
Pronto nossa nova regra foi criada.
Se preferir adicionar a regra do firewall via linha de comando basta você adaptar o comando abaixo às suas necessidades.
netsh advfirewall firewall add rule name="IISExpressWeb" dir=in protocol=tcp localport=61533 profile=private remoteip=localsubnet action=allow
Esse comando adiciona uma nova regra ao Firewall do Windows, permitindo conexões externas a porta 61533 para computadores da sua subrede.
Nesse ponto, basta você pressionar Ctrl-F5 no Visual Studio, e acessar sua API ou site em outra máquina! Para situações avançadas acesse o blog do Scott Hanselman.
Excelente material de consulta, muito obrigado por esta postagem!
Com o VISUAL STUDIO CODE, em tempo de projeto, na linha de comando, dotnet run, o servidor executado não é o IIS EXPRESS é o .NET Core Host.
Com este servidor seria algo parecido ?
Fala Ari beleza!
Primeiramente obrigado por acompanhar o meu trabalho e quanto a dúvida eu não tenho certeza pra te dar uma informação precisa!
Grande abraço!
Olá tudo bem, parabéns pela postagem, muito bacana, tenho uma aplicação que roda no meu server local IIS, porém está bloqueando algumas conexões externas, e eu gostaria que fosse irrestritas, porém não achei a configuração correta, me parece que algumas configurações de alguns provedores identificam como uma ameaça e bloqueiam a conexão… Tem ideia do que pode ser?
Muito Obrigado.
Para quem tentou esse método e ficou com erro no seu IIS ao executar a aplicação, rode esse comando para excluir a regra acima:
Execute no PowerShell como Administrador:
netsh http del urlacl url=http://*:44390/
Isso vai voltar a como era antes…
Eu tentei usar o método mas tive esse problema e demorei para encontrar a solução, por isso estou postando aqui.