IISExpress retorna um erro 503 de máquinas remotas

183

Estou tentando testar um site em execução em uma instância local IISExpress com algumas outras máquinas / dispositivos na minha rede local. Estou executando o Win7 Pro.

Quando tento procurar a minha máquina pela primeira vez em outra máquina no meu segmento de rede local, recebo um erro 400: Nome do host inválido.

Entendo que preciso conceder acesso remoto à ACL com um comando no prompt de comando elevado, como:

netsh http add urlacl url=http://mymachinename:50333/ user=everyone

Agora, recebo um erro de serviço 503 indisponível.

No momento, o Firewall do Windows está desligado e posso procurar minha instância local do IISExpress com o endereço http://localhost:50333

Qual é a peça final deste quebra-cabeça de configuração?

Jeff Fritz
fonte
1
O que acontece se você procurar a http://mymachinename:50333/ partir de seu computador?
Coronel Panic
1
O problema foi resolvido. Veja a resposta aceita de vikomall
Jeff Fritz
1
Mais profunda discussão sobre isso aqui: hanselman.com/blog/...
Chris Moschini
3
Você pode instalar nossa extensão gratuita do VS 'Conveyor' para contornar esse problema marketplace.visualstudio.com/…
Jim W diz que restabelece Monica em

Respostas:

270

Parece que está faltando uma entrada de informações de ligação no arquivo applicationhost.config.

  1. Abra o arquivo applicationhost.config. Os locais possíveis são:

    • %userprofile%\Documents\IISExpress\config\applicationhost.config
    • $(solutionDir)\.vs\config\applicationhost.config (VS2015)
    • Caso contrário, inspecione a saída iisexpress.exepara ter certeza.
  2. Localize a entrada do site e adicione a seguinte ligação ao nome da sua máquina.

         <binding protocol="http" bindingInformation=":50333:your-machine-name" />
    
  3. Reinicie o IIS Express

vikomall
fonte
9
Deixa pra lá. O Visual Studio criou uma entrada de configuração duplicada para o item. Eu o removi e funcionou.
Nuzzolilo 26/10/12
3
O IIS Express nem sempre usa o arquivo de configuração nesse caminho. Leia a saída com iisexpress.execuidado para ver qual arquivo de configuração está usando.
Coronel Panic
5
Ponto principal 3, reinicie o IIS Express! Localize o ícone na bandeja do sistema e pare-o para forçar a reinicialização. Não tenho certeza se existe uma maneira mais elegante. Mas isso funcionou para mim. Obrigado!
O senador
9
Se você é preguiçoso demais para adicionar cada hostname / ipaddress uso combinação a * em vez de "your-machine-name"
Starquake
4
Mais uma dica: se você clicar com o botão direito do mouse no ícone da bandeja do IISExpress, poderá selecionar "Mostrar todos os aplicativos", que abrirá uma caixa de diálogo mostrando todos os aplicativos que você está executando localmente no momento. Clique com o botão direito do mouse no aplicativo desejado (não clique com o botão esquerdo ou ele abrirá o navegador) e, em seguida, você verá "Caminho" e "Configuração" abaixo. Clique com o botão esquerdo do mouse em "Config" e ele abrirá o arquivo Applicationhost.config relacionado, no qual você precisará adicionar / editar as ligações, conforme descrito acima. Essa é uma maneira fácil de localizar a configuração atual.
Matt
31

Havia apenas uma coisa que funcionou para mim.

usar *:portnumber:*não era bom. Sim, depois de fazer isso e garantir que o Firewall do Windows estivesse aberto, eu poderia conectar-me à porta, mas ainda assim recebi o erro "503".

Testei algumas coisas localmente e descobri que apenas http: // localhost funcionava. Usando o endereço IP real (não 127.0.0.1, mas, por exemplo, 192.168.1.50), ainda retornava um 503 mesmo na máquina local. Tentei usar o nome do host real nas ligações, mas o IIS Express se recusou a iniciar. Isso pode realmente ter algo a ver com a forma como o nome do host estava sendo resolvido. Eu não explorei isso mais.

Por fim, acabei usando esta configuração:

<binding protocol="http" bindingInformation="*:53351:localhost" />
<binding protocol="http" bindingInformation="192.168.1.50:53351:*" />

Dessa maneira, eu consegui me conectar de uma máquina remota usando http://192.168.1.50:53351.

O lagarto
fonte
Eu atingi esse erro exato, mas não queria codificar o IP atual na configuração, pois ele pode mudar. Achei que o curinga funciona nas partes de IP e nome do host, então acabei com: <binding protocol="https" bindingInformation="*:44300:*" /> <binding protocol="http" bindingInformation="*:8888:*" /> edit: realmente tentei entender a remarcação SO, saí :).
Brian Barker
19

Depois de desperdiçar mais de 3h em um assunto tão completo, decidi compartilhar minha configuração com você. Minha configuração é o Visual Express 2012 para atualização da Web 4 no Windows 8. Essa foi a primeira vez que voltei ao MS VS desde os estudos (pelo menos 8 anos) e agora tenho certeza de que o linux governa. No django, esse tipo de configuração levou 10 minutos de pesquisa na documentação.

  1. desativar o firewall para teste

    netsh advfirewall set allprofiles state off
    
  2. ligações de configuração no meu caso, o endereço local é localIP = 192.168.1.102 (como os links não podem conter domínio não numérico, use-o abaixo em vez de mylocaldomain.com, consulte a política de stackoverflow) em Documents\IISExpress\config\applicationhost.config

    <bindings>
        <binding protocol="http" bindingInformation="*:53351:mylocaldomain.com" />
        <binding protocol="http" bindingInformation="*:53351:localhost" />
    </bindings>
    
  3. adicionar execução automática automaticamente ao serviço de início ISS Express

    <site name="NeuronCharts" id="2" serverAutoStart="true">
    
  4. Adicione algumas regras estranhas ao servidor http (ainda não sei se isso é necessário)

    netsh http add urlacl url=http://mylocaldomain.com:53351/ user=everyone
    
  5. execute o IISExpress manualmente, não no VS IDE

  6. você verá que o ISSExpress está registrando ligações
  7. executar navegador http://mylocaldomain.com:53351 Se o estiver funcionando, podemos adicionar uma regra de firewall
  8. adicionar regra de firewall

    netsh advfirewall firewall add rule name="IISExpressWeb" dir=in protocol=tcp localport=53351 remoteip=any action=allow
    

configure remoteip para any se desejar acessar seu servidor de outro mundo se desejar acessar para a rede local use localsubnet

  1. iniciar firewall

    netsh advfirewall set allprofiles state on
    
  2. verifique novamente se tudo está funcionando no IP local e público

Desejo-te sorte

Rafal

Rafal
fonte
3
Isso fez com que o IIS Express não fosse mais executado no Win8 com o VS2013 sem executar o VS2013 como administrador. É causado pelo IIS Express agora tentando abrir para o tráfego externo como resultado do comando netsh. Eu também nunca consegui fazê-lo atender a esse tráfego; Eu obter um 503. Para reverter o problema causado pelo comando netsh nesta resposta, executar este a partir de uma corrida prompt de comando como administrador: netsh http delete urlacl url=http://*:55416/(substitua porta com a porta)
Chris Moschini
fwiw - Não preciso da etapa 4 (a chamada netsh de que @Rafal não tem certeza é necessária) e, embora não precise da ligação "localhost" na etapa 2 para executar os projetos do VS2013 em minha solução, a frente O carregamento final é significativamente mais rápido quando a ligação "localhost" é deixada no lugar.
Lukkea
Eu descobri que seguir as instruções acima ainda resultava em 503 usando localhost. Descobri que o nome da máquina convidada (Windows) precisava estar nas ligações applicationhost.confige, no host (Mac), o nome da máquina convidada precisava ser mapeado para 127.0.0.1dentro /etc/hosts. Somente então uma solicitação para a máquina convidada no host foi bem-sucedida.
Matt
Uma adição à etapa 5. Use iisexpress.exe / siteid: id em que id é o valor do atributo id do seu site na configuração <site id = "id">, caso contrário, ele iniciará o 1º site.
Mudit Jain 29/08/16
9

Constatou que o problema tinha a ver com um mapeamento urlacl ruim. Para descobrir isso:

netsh http show urlacl 

e procure por coisas como http://+:80/ou a porta à qual você está vinculando.

Então use

netsh http delete url=<the url from the list>

Isso corrigiu o problema para mim.

Anthony Rizzolo
fonte
4
deve ser netsh http delete urlacl url = <o URL da lista>, isso funcionou para mim obrigado!
Sergiogx 09/12/19
1
Isso é discutido em mais detalhes no blog msdn . Este também foi o meu problema.
Kevin Scharnhorst
3
Obrigado, a sintaxe exata énetsh http delete urlacl <yoururl>
yoel halb
7

Nada funcionou para mim. Finalmente eu encontrei o iisexpress-proxy

Veja minha resposta https://stackoverflow.com/a/33623399/631527

Outra solução é ngrok

Kit de ferramentas
fonte
Surpreendente! Eu tentei todas as outras soluções e elas também não funcionaram. "Solicitação incorreta" ou "Serviço indisponível". Muito complicado. Eu instalei o módulo do nó e o executei, ele funciona instantaneamente !!
TetraDev 29/01
TRABALHO! piedosos! Obrigado!
Ayson Baxter
confira ngrok also
Toolkit
1
Simplesmente funciona como um encanto com o ngrok! É estranho ter que rotear primeiro do localhost para o iis-proxy e depois do proxy para o ngrok, mas ei, funcionou !. Por exemplo, eu tenho meu iisexpress na porta 3028. Eu corri iisexpress-proxy 3028 to 12345e depois ./ngrok.exe http 12345. Re
Reuel Ribeiro
@TetraDev, o "Bad pedido" ou "serviço indisponível" foi porque o cabeçalho do host recebido quando accesing localhost de ngrok não foi um localhost como explicado aqui
Dani Torres
3

O que me ajudou foi clicar com o botão direito do mouse no ícone 'IISExpress', 'Mostrar todos os aplicativos'. Depois, selecionando o site e vi qual aplicationhost.config ele usa, e a correção foi perfeita.

Configuração do IISExpress

Emmanuel
fonte
1

O problema está atualizando o arquivo applicationhost.config dentro da pasta da Web em vez da solução. O arquivo de configuração da solução é o único a alterar

Victor Arce
fonte
1

Após a solução do @vikomall, não se esqueça de iniciar o VS como administrador. Isso corrige para mim.

Rapido
fonte
0

Em relação à resposta de Anthony Rizzolo: no Windows 8.1, tive que digitar assim:

netsh http delete urlacl url=<the url from the list>

Por exemplo:

netsh http delete urlacl url=http://+:8689/
Elrinth
fonte
0

Nenhuma das respostas acima funcionou para mim.

Eu tive duas entradas no netsh para o mesmo serviço

netsh http show urlacl

insira a descrição da imagem aqui

Um usando um curinga forte, o outro usando um curinga fraco.

A remoção do que estava com o curinga fraco fez o trabalho.

Mais sobre o curinga forte e fraco no contexto de netsh

Quando o elemento host de um UrlPrefix consiste em um único sinal de adição (+), o UrlPrefix corresponde a todos os nomes de host possíveis no contexto de seu esquema, porta e elementos relativosURI, e se enquadra na categoria de curinga forte.

Quando um asterisco (*) aparece como o elemento host, o UrlPrefix cai na categoria de curinga fraca. Esse tipo de UrlPrefix corresponde a qualquer nome de host associado ao esquema, porta e URL relativo, que ainda não foram correspondidos por um UrlPrefix de curinga forte-curinga, explícito ou curinga forte. Essa especificação de host pode ser usada como um exemplo geral em algumas circunstâncias ou para especificar uma grande seção do espaço para nome da URL sem precisar usar muitos UrlPrefixes.

https://docs.microsoft.com/en-gb/windows/desktop/Http/urlprefix-strings

matcheek
fonte