Como ativar a solicitação externa no IIS Express?

466

Como posso ativar solicitações remotas no IIS Express? Scott Guthrie escreveu que isso é possível, mas ele não disse como.

TedTel
fonte
25
Há uma extensão gratuita do VS para isso que escrevemos visualstudiogallery.msdn.microsoft.com/…
Jim W diz que restabelece a Monica no dia
@ Jim Jim, você é o criador do plugin? Por favor, você poderia explicar como esse milagre da engenharia de software funciona?
11133 Ian Warburton
@IanWarburton obrigado por chamá-lo de um milagre! É um servidor proxy reverso.
Jim W diz que restabelece Monica
@ JimW Obrigado por criá-lo.
Ian Warburton
@ JimW Eu tentei o seu plugin e faço tudo como você disse no tutorial. Mas eu ainda não posso acess meu localhost
mark_spencer

Respostas:

403

Agora, há uma postagem de blog no site da equipe do IIS explicando como habilitar conexões remotas no IIS Express . Aqui está a parte pertinente desse post resumida:

No Vista e Win7, execute o seguinte comando em um prompt administrativo:

netsh http add urlacl url=http://vaidesg:8080/ user=everyone

Para XP, instale primeiro as Ferramentas de Suporte do Windows XP Service Pack 2. Em seguida, execute o seguinte comando em um prompt administrativo:

httpcfg set urlacl /u http://vaidesg1:8080/ /a D:(A;;GX;;;WD)

Damian Edwards
fonte
121
No caso de um erro 503, consulte o seguinte: stackoverflow.com/questions/5442551/…
deerchao 12/10/12
5
Existe um netshcomando para permitir conexões em qualquer nome de host?
Coronel Panic
33
Apenas para constar, caso você tenha uma máquina Windows em um idioma diferente do inglês, o parâmetro de user={PARAM_USER}estará no seu próprio idioma.
GoRoS
7
O uso de curingas no parâmetro url (por exemplo, url = http: // *: 8080 /) fará com que as conexões funcionem tanto para o nome do host quanto para o endereço IP do computador.
Anders
2
Caso o comando falhe (provavelmente erro 1789), leve em consideração que o comando espera o usuário no idioma do seu PC. Portanto, se o seu PC estiver em português, por exemplo, use em user=todosvez de user=everyone.
Vitor Canova
350

Você pode precisar fazer três alterações.

  1. Diga ao IIS Express para se conectar a todos os endereços IP e nomes de host. No seu .configarquivo Tipicamente:
    • VS 2015: $(solutionDir)\.vs\config\applicationhost.config
    • <VS 2015: %userprofile%\My Documents\IISExpress\config\applicationhost.config

Encontre o elemento de ligação do seu site e adicione

    <binding protocol="http" bindingInformation="*:8080:*" />
  1. Configure o bit do Windows chamado 'http.sys'. Como administrador, execute o comando:
    netsh http add urlacl url=http://*:8080/ user=everyone

Onde everyoneé um grupo do Windows. Use aspas duplas para grupos com espaços como "Tout le monde".

  1. Permita o IIS Express através do firewall do Windows.

    Iniciar / Firewall do Windows com Segurança Avançada / Regras de Entrada / Nova Regra ...

    Programa %ProgramFiles%\IIS Express\iisexpress.exe
    OU Porta 8080 TCP

Agora, quando você iniciar, iisexpress.exevocê verá uma mensagem como

URL "http: // *: 8080 /" registrado com sucesso para o site "hello world" application "/"

Coronel Panic
fonte
22
Nota: se você estiver executando uma versão localizada do Windows, o parâmetro users=everyonepara netsh(segunda etapa) poderá causar o erro 1789. A solução é traduzir everyonepara o nome do grupo correspondente no seu idioma.
precisa saber é o seguinte
5
Como você obtém um projeto do Visual Studio para aceitar essa ligação? Nas propriedades do projeto, onde você especifica Project Url, se eu inserir um asterisco para o nome do host, ocorrerá um erro. Se eu inserir mais alguma coisa, ele tenta criar um novo diretório virtual. Não está vinculado à entrada em application.config.
Trevor Elliott
20
Para fazê-lo funcionar no Visual Studio, você deve usar o nome do host do computador nas etapas 1 bindingInformation="*:8080:hostname"e 2 url=http://hostname:8080/e nas propriedades do projeto da Web do Visual Studio na guia Web, defina URL do Projeto como http://hostname:8080/. Exclua o *urlacl se você já criou um; não funcionará se você tiver os dois. Por fim, o URL que você acessa no navegador da web deve fazer referência ao nome do host, não ao host local.
9118 Joe Daley
5
Eu também precisava ter uma linha localhost no elemento bindings, caso contrário, o visual studio 2013 tentaria criar uma entrada de site duplicada. por exemplo:<binding protocol="http" bindingInformation="*:8080:localhost" />
kristianp
3
Eu também precisava executar o Visual Studio como administrador, mas essa resposta foi a mais completa.
Dsso # 7/15
127

Lembro-me de ter os mesmos problemas ao tentar esse fluxo de trabalho há alguns meses.

É por isso que escrevi um utilitário proxy simples especificamente para esse tipo de cenário: https://github.com/icflorescu/iisexpress-proxy .

Usando o IIS Express Proxy , tudo se torna bastante simples - não é necessário “netsh http add urlacl url = vaidesg: 8080 / user = everyone” ou mexer no seu “applicationhost.config”.

Basta emitir isso no prompt de comando:

iisexpress-proxy 8080 to 3000

… E então você pode apontar seus dispositivos remotos para http: // vaidesg: 3000 .

Na maioria das vezes mais simples é melhor.

Ionut-Cristian Florescu
fonte
3
Obrigado pela ótima solução!
Horário de verão
1
E devo acrescentar que as soluções Node.js como esta são as únicas que funcionam de maneira confiável no Azure, pois o Azure cria automaticamente a geração automática do arquivo applicationhost.config e apaga as alterações de ligação.
TheHansinator
1
Comecei a usar o IIS Express Proxy no meu Mac junto com o ngrok depois que o ngrok não funcionou conforme o esperado (porque eu não havia feito a manipulação de configuração do IIS Express necessária). Muito conveniente! Obrigado.
Codingoutloud
1
Esta é de longe a solução mais fácil. Prefiro não mexer com o applicationhost.config se não for necessário.
skalpin
4
Excelente solução! Agora, para voltar e desfazer a bagunça que fiz do meu IIS Express.
Mitch Stewart
123

Nada funcionou para mim até que eu encontrei o iisexpress-proxy .

Abra o prompt de comando como administrador e execute

npm install -g iisexpress-proxy

então

iisexpress-proxy 51123 to 81

supondo que seu projeto do Visual Studio seja aberto no localhost: 51123 e você deseja acessar o endereço IP externo xxxx: 81

Editar: atualmente estou usando ngrok

Conjunto de ferramentas
fonte
7
solução indolor
bahadir
4
Solução mais fácil que encontrei. Provavelmente deve renomear o pacote para algo como web-proxy, pois você pode usá-lo por mais de iisexpress forwarding :)
Mario Tacke
8
@xgp - Oi, eu sou o autor do iisexpress-proxy :-) Você conseguiu fazê-lo funcionar no final? Você precisa fechar e reabrir o prompt de comando ou, em casos raros, reiniciar o sistema operacional. Envie- me uma linha na página do projeto ( github.com/icflorescu/iisexpress-proxy ) se você tiver mais perguntas e tentarei ajudar se tiver tempo.
Ionut-Cristian Florescu 01/03
1
Obrigado a todos por usá-lo e por suas amáveis ​​palavras :-). @MarioTacke - sim, eu sei, mas mais pessoas são capazes de encontrá-lo, apenas o Google-ing, se ele é chamado iisexpress-proxy :-)
Ionut-Cristian Florescu
1
Btw, isso não funciona com autenticação do Windows.
Tom
35

Como uma nota lateral para isso:

netsh http add urlacl url=http://vaidesg:8080/ user=everyone

Isso funcionará apenas nas versões em inglês do Windows. Se você estiver usando uma versão localizada, precisará substituir "todos" por outra coisa, por exemplo:

  • "Iedereen" ao usar uma versão holandesa
  • "Jeder" ao usar uma versão alemã
  • "Mindenki" ao usar uma versão húngara

Caso contrário, você receberá um erro (falha na criação do SDDL, erro: 1332)

brisa
fonte
33

Um bom recurso é Trabalhar com SSL no Tempo de Desenvolvimento é mais fácil com o IISExpress de Scott Hanselman.

O que você procura é a seção Obtendo o IIS Express para servir externamente pela Porta 80

Luke Sampson
fonte
Esta postagem do blog recomenda isolar a porta 80 para "IISExpressWeb.exe". A versão atual do IIS Express não possui um exe desse nome - há apenas IISExpress.exe e IISExpressTray.exe. Isolar as conexões impede uma conexão externa; eliminar a restrição do processo permite a conexão. Qual é o .exe adequado para o destino?
22612 Chris Moschini
33

Se você estiver trabalhando com o Visual Studio, siga estas etapas para acessar o IIS-Express sobre endereço IP:

  1. Obtenha seu endereço IP do host: ipconfigna linha de comando do Windows
  2. Vamos para

    $(SolutionDir)\.vs\config\applicationHost.config
  3. Encontrar

    <site name="WebApplication3" id="2">
       <application path="/" applicationPool="Clr4IntegratedAppPool">
          <virtualDirectory path="/" physicalPath="C:\Users\user.name\Source\Repos\protoype-one\WebApplication3" />
       </application>
       <bindings>
         <binding protocol="http" bindingInformation="*:62549:localhost" />
       </bindings>
    </site>
  4. Adicione: <binding protocol="http" bindingInformation="*:62549:192.168.178.108"/>
    com seu endereço IP

  5. Execute seu Visual Studio com direitos de administrador e tudo deve funcionar
  6. Talvez procure alguns problemas de firewall se você tentar se conectar a partir de dispositivos remotos.
Daniel Eisenreich
fonte
20

Eu o resolvi com a instalação do "Conveyor by Keyoti" no Visual Studio Professional 2015. O transportador gera um endereço REMOTE (seu IP) com uma porta (45455) que permite solicitação externa. Exemplo:

insira a descrição da imagem aqui

O Transportador permite testar aplicativos da Web de tablets e telefones externos na sua rede ou de emuladores Android (sem http://10.0.2.2:<hostport>)

As etapas estão no seguinte link:

https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti

Ronny Morán
fonte
@ kilianeller, siga o link na resposta e faça uma pergunta, podemos ajudá-lo.
Jim W diz que restabelece Monica
Workst !!, eu provo todas as outras soluções (mude applicationhost.config, netsh, endereço IPv6 ..) e nada, mas instalando este finalmente funciona, o único pequeno problema foi que o endereço IP foi mal direcionado, mas não é um problema sério.
Ion
Muito fácil de instalar. Apenas certifique-se de adicionar o certificado no seu navegador remoto, conforme as instruções na página da extensão.
Andres
Não acredito, funciona !!! TÃO SIMPLES, TÃO ELEGANTE !!! Passei as últimas 5 horas apenas para procurar soluções vazias e, finalmente, conheço isso!
Ziggy192
10

Se você tentou a resposta do Coronel Panic, mas não funciona no Visual Studio, tente o seguinte:

Anexe outro <binding />na sua configuração do IIS Express

<bindings>
    <binding protocol="http" bindingInformation="*:8080:localhost" />
    <binding protocol="http" bindingInformation="*:8080:hostname" />
</bindings>

Por fim, você precisa executar o Visual Studio como Admin

Bruce
fonte
Infelizmente, isso não parece trabalhar para mim .. eu ainda obter conexão recusada quando tento acessar meu ip local na porta 8080
Thomas Teilmann
@ThomasTeilmann, no Visual Studio, tive que abrir as propriedades do aplicativo Web e, na guia Web, alterar "URL do Projeto" para usar o nome alternativo do host em vez do localhost.
Sam
@ThomasTeilmann, Ah, e acho que você precisa procurá-lo pelo nome do host e não pelo IP.
Sam
Tentei os dois também, na verdade, e não funcionou para a instância da nuvem: / Obrigado embora
Thomas Teilmann
Esta foi a resposta para mim (ou seja, execute o VS como administrador) - obrigado @Bruce. Além disso, eu também tive que corrigir manualmente minhas configurações de firewall. No meu caso (ou seja, testar se meu iphone pode navegar na minha máquina de desenvolvimento), abrir a porta 8080 no firewall não funcionou (hein?), Mas abrir o acesso por ip (por exemplo, escopo> IPs locais = 10.0.0.0/24 = minha casa rede) fez o truque.
Ilan
9

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
2
Essa resposta me apontou para uma outra solução, a edição applicationhost.config a aceitar : 55665: em vez de *: 55665: localhost
Deko
Obrigado @Deko - seu comentário, juntamente com o comando netsh mencionado em algumas outras respostas, fez com que funcionasse para mim.
Marcel Popescu
8

Foi o que fiz no Windows 10 com o Visual Studio 2015 para habilitar o acesso remoto, tanto com http quanto https:

O primeiro passo é vincular seu aplicativo ao seu endereço IP interno. Execute cmd-> ipconfigpara obter o endereço. Abra o arquivo /{project folder}/.vs/config/applicationhost.confige role para baixo até encontrar algo parecido com isto:

<site name="Project.Web" id="2">
    <application path="/">
        <virtualDirectory path="/" physicalPath="C:\Project\Project.Web" />
    </application>
    <bindings>
        <binding protocol="http" bindingInformation="*:12345:localhost" />
    </bindings>
</site>

Adicione duas novas ligações em bindings. Você também pode usar HTTPS se desejar:

<binding protocol="http" bindingInformation="*:12345:192.168.1.15" />
<binding protocol="https" bindingInformation="*:44300:192.168.1.15" />

Adicione a seguinte regra ao seu firewall, abra um novo cmdprompt como administrador e execute os seguintes comandos:

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

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

Agora inicie o Visual Studio como Administrator. Clique com o botão direito do mouse no arquivo de projeto de projetos da web e selecione Properties. Vá para a Webguia e clique em Create Virtual Directory. Se o Visual Studio não for executado como administrador, isso provavelmente falhará. Agora tudo deve funcionar.

insira a descrição da imagem aqui

Ogglas
fonte
Trabalhou para mim! :) Também há um bom post aqui: blog.kloud.com.au/2017/02/27/…
Leniel Maccaferri
Eu tentei de tudo, incluindo o ngrok, sem sucesso. Isso funcionou na primeira tentativa.
kooldave98
5

A resposta aceita para esta pergunta é um guia para fazer o IIS Express funcionar com o webmatrix. Achei este guia mais útil ao tentar fazê-lo funcionar com o VS 2010.

Eu apenas segui as etapas 3 e 4 (executando o IIS Express como administrador) e tive que desativar temporariamente meu firewall para fazê-lo funcionar.

Chade
fonte
As instruções que você vincula para perder a capacidade de depurar no Visual Studio, o que, pelo menos em minha opinião, não faz sentido - usar o IIS ou qualquer outro servidor remoto seria tão bom ou melhor (porque você pode configurar a depuração remota no IIS pelo menos). Se o IIS Express não exigisse privilégios de administrador para executar sem o host local, isso funcionaria. Muito irritante.
Chris Moschini
Era exatamente isso que eu procurava - obrigado! Estou usando o IIS Express com o Visual Studio 2010 e estava indo para testar um aplicativo ASP.NET MVC3 na minha LAN, e isso era o que eu precisava para que isso funcione :)
Lasse Christiansen
5

Você pode tentar configurar o encaminhamento de porta em vez de modificar a configuração do IIS Express, adicionando novas regras HTTP.sys ou executando o Visual Studio como administrador.

Basicamente, você precisa encaminhar o IP:PORTsite para outra porta gratuita em sua máquina, mas no adaptador de rede externo, não no host local.

O problema é que o IIS Express (pelo menos no Windows 10) se liga ao [::1]:portsignificado de ouvir na porta IPv6. Você precisa levar isso em conta.

Aqui está como eu fiz esse trabalho - http://programmingflow.com/2017/02/25/iis-express-on-external-ip.html

Espero que ajude.

srmrco
fonte
Estou executando o Windows 10 e vincular o host local ao IPv6 foi a chave. Obrigado!
TomaszGuzialek
O computador que eu estava tentando configurar tinha outro endereço local. Foi nomeado "local-dev". Eu só tinha que ligar adicionar v4tov6 listenport = 3000 connectaddress = local-dev connectport = 60000 para fazê-lo funcionar. Ótimo post, obrigado!
Anika
4

A maneira mais simples e legal de encontrar foi usar (demora 2 minutos para configurar):

https://ngrok.com/

Ele funcionará com qualquer coisa em execução no host local. Basta inscrever-se, executar um pouco flexível e o que você executar no localhost obtém uma URL pública que você pode acessar de qualquer lugar.

Isso é bom para mostrar coisas aos colegas de equipe remotos, sem mexer na configuração do IIS ou nos firewalls. Deseja parar o acesso apenas finalize o executável.

ngrok authtoken xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

ngrok http -host-header=localhost 89230

assumindo que 89230 é sua porta do IIS Express

Você também pode executar várias portas, mesmo em plano gratuito

Artur Kędzior
fonte
1
Quem pensaria que terei de ler tantas respostas até obter uma solução ...
alexkovelsky 29/01
3

Estou com alguns problemas ao usar o IIS Express no Windows 8.1 e solicitação externa.

Sigo estas etapas para depurar a solicitação externa:

  1. Instale o IIS
  2. Configure o Visual Studio para usar o IIS local (propriedades da página no seu projeto da Web)
  3. Criar um AppPool exclusivo no IIS para trabalhar com meu aplicativo
  4. No meu projeto, estou usando o Oracle Client e deve ter 32 bits (64 bits não funcionam com o Visual Studio), então preciso permitir 32 bits no pool de aplicativos
  5. Configure o firewall do Windows para permitir solicitação na porta 80 (regras de entrada)

Está funcionando!

Robson Douglas
fonte
2

Se você executar o Visual Studio no Admin, poderá adicionar apenas

<binding protocol="http" bindingInformation="*:8080:*" />

ou

<binding protocol="https" bindingInformation="*:8443:*" />

para dentro

%userprofile%\My Documents\IISExpress\config\applicationhost.config
Andrii
fonte
1
Apliquei essa configuração $(SolutionDir).vs\config\applicationHost.confige também tive que abrir a porta (8443) do aplicativo no firewall do Windows.
Tonatio 26/01
2

Eu tinha um IIS local ativado, então eu apenas criei uma regra de reescrita para minha porta de depuração ... Eu acho que isso é melhor e mais legal que outro método, porque é mais fácil remover uma vez que o desenvolvimento seja concluído ... Aqui está a aparência da reescrita. .

<rewrite>
    <rules>
        <rule name="ReverseProxyInboundRule1" stopProcessing="true">
            <match url="^dev/(.*)" />
            <action type="Rewrite" url="http://localhost:47039/{R:1}" />
        </rule>
    </rules>
</rewrite>

O VS também permite que você desenvolva usando o IIS local diretamente (o que permite conexões remotas), mas, por sua vez, você sempre deve executá-lo como administrador ... Eu não gosto disso.

Konzo
fonte
Esta é a minha solução favorita também, obrigado :) Eu só tinha que ativar o Proxy Reverso no meu IIS primeiro e depois adicionar esta regra ao meu web.config.
Mahdi Ghiasi
1

Resolvi esse problema usando a abordagem de proxy reverso.

Instalei o servidor wamp e usei o recurso proxy reverso simples do servidor web apache.

Adicionei uma nova porta para ouvir o servidor da web Apache (8081). Em seguida, adicionei a configuração de proxy como host virtual para essa porta.

<VirtualHost *:8081>
ProxyPass / http://localhost:46935/
ProxyPassReverse / http://localhost:46935/
</VirtualHost>
mustafacanturk
fonte
1

Eu fiz todas essas etapas e nada me ajudou. E o que eu preciso é apenas para executar meu aplicativo via IIS Express ...

insira a descrição da imagem aqui

Espero que ajude.

Maksym Labutin
fonte
0

Não foi possível atender às solicitações do iis a outros usuários na minha rede local; tudo o que eu precisava fazer (além do acima) era reiniciar o roteador do BT Hub.

Terry Kernan
fonte
0

Isso é incrivelmente impressionante e até cobre HTTPS com nomes de domínio bastante:

http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx

As partes realmente impressionantes que não encontrei em nenhum outro lugar no SO, caso o link acima desapareça:

> C:\Program Files (x86)\IIS Express>IisExpressAdminCmd.exe Usage:
> iisexpressadmincmd.exe <command> <parameters> Supported commands:
>       setupFriendlyHostnameUrl -url:<url>
>       deleteFriendlyHostnameUrl -url:<url>
>       setupUrl -url:<url>
>       deleteUrl -url:<url>
>       setupSslUrl -url:<url> -CertHash:<value>
>       setupSslUrl -url:<url> -UseSelfSigned
>       deleteSslUrl -url:<url>
> 
> Examples: 1) Configure "http.sys" and "hosts" file for friendly
> hostname "contoso": iisexpressadmincmd setupFriendlyHostnameUrl
> -url:http://contoso:80/ 2) Remove "http.sys" configuration and "hosts" file entry for the friendly  hostname "contoso": iisexpressadmincmd
> deleteFriendlyHostnameUrl -url:http://contoso:80/

O utilitário acima registrará o certificado SSL para você! Se você usar a opção -UseSelfSigned, é super fácil.

Se você deseja fazer as coisas da maneira mais difícil, a parte não óbvia é que você precisa informar ao HTTP.SYS qual certificado usar, desta forma:

netsh http add sslcert ipport=0.0.0.0:443 appid={214124cd-d05b-4309-9af9-9caa44b2b74a} certhash=YOURCERTHASHHERE

Certhash é a "Impressão digital" que você pode obter nas propriedades do certificado no MMC.

eselk
fonte
0

Fiz o seguinte e consegui conectar:

1) alterou a ligação de configuração expressa do IIS do host local para '*'

protocolo de ligação = "http" bindingInformation = "*: 8888: *"

2) Regra de entrada definida no firewall para permitir a porta específica para o tipo de protocolo: tcp

3) Adicione o seguinte comando para adicionar a configuração de rede à sua porta: netsh http add urlacl url = http: // *: 8888 / user = everyone

dhakalan
fonte
Como você está respondendo a essa pergunta 6 anos após a pergunta, e já existem 12 outras respostas, seria melhor se você editasse sua resposta para explicar como sua resposta funciona melhor que as outras 12 (ou pelo menos como é diferente).
Heretic Monkey
0

Outra maneira de acessar solicitações externas é usar o IIS em vez do IIS Express. No meu estúdio visual, eu posso simplesmente mudar facilmente.

insira a descrição da imagem aqui

PJ3
fonte
Estou usando o VS2019.
PJ3 03/03
-1

[caixa de diálogo de propriedades do projeto]

Para desenvolvimento usando o VisualStudio 2017 e um projeto de API NetCore:

1) No Cmd-Box: ipconfig / all para determinar o endereço IP

2a) Digite o endereço IP recuperado em Propriedades do projeto-> Guia Debug

2b) Selecione uma porta e anexe-a ao endereço IP da etapa 2a.

3) Adicione uma regra de permissão no firewall para permitir o tráfego TCP de entrada na porta selecionada (meu firewall é acionado com uma caixa de diálogo: "Bloquear ou adicionar regra ao firewall"). Adicionar irá nesse caso fazer o truque.

Desvantagem da solução acima:

1) Se você usar um endereço IP dinâmico, precisará refazer as etapas acima, caso outro endereço IP tenha sido atribuído.

2) O servidor agora possui uma porta aberta que você pode esquecer, mas essa porta aberta permanece um convite para convidados indesejados.

Paul Franke
fonte