c# microsoft - Como habilitar a solicitação externa no IIS Express?




asp net (20)

Eu tinha um IIS local habilitado então eu apenas criei uma regra de reescrita para a minha porta de depuração ... Eu acho que isso é melhor e mais legal que outro método porque é mais fácil de remover quando eu terminar de desenvolver ... Aqui está como a reescrita parece. .

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

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

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


A resposta aceita para essa pergunta é um guia para obter o IIS Express para trabalhar 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 que ele funcionasse.


Não consegui atender aos pedidos do iis para outros usuários na minha rede local, tudo o que precisei fazer (além do acima) foi reiniciar meu roteador BT Hub.


Se você já tentou a resposta do coronel Panic, mas não funciona no Visual Studio, tente isto:

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

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

Finalmente, você tem que executar o Visual Studio como administrador


Isso é insanamente incrível e até mesmo cobre HTTPS com nomes de domínio bastante:

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

As partes realmente impressionantes que eu não consegui encontrar em nenhum outro lugar em SO, caso o link acima nunca vá embora:

> 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 irá registrar o certificado SSL para você! Se você usar a opção -UseSelfSigned, é super fácil.

Se você quer fazer as coisas da maneira mais difícil, a parte não óbvia é que você precisa dizer ao HTTP.SYS que certificado usar, assim:

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 das propriedades do certificado no MMC.


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

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

Usando o https://github.com/icflorescu/iisexpress-proxy , tudo se torna bem simples - não é necessário “netsh http adicionar 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 .

A maioria das vezes mais simples é melhor.


Existem três alterações que você pode precisar fazer.

  1. Diga ao próprio IIS Express para ligar a todos os endereços IP e nomes de host. No seu arquivo .config . 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 de janelas. 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 o iisexpress.exe deverá ver uma mensagem como

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


O que me ajudou, foi o botão direito do mouse no ícone 'IISExpress', 'Mostrar todos os aplicativos'. Em seguida, selecionei o site e vi qual aplicativohost.config ele usa, e a correção correu perfeitamente.


Há um post de blog no site da equipe do IIS explicando agora como habilitar conexões remotas no IIS Express . Aqui está a parte pertinente desse post resumida:

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

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

Para o XP, primeiro instale 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)


[diálogo de propriedades do projeto]

Para desenvolvimento usando o VisualStudio 2017 e um projeto de API da 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 de depuração

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 vontade, nesse caso, faça 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) Você servidor agora tem uma porta aberta que você pode esquecer, mas esta porta aberta permanece um convite para os convidados indesejados.


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

Basicamente, você precisa encaminhar o IP:PORT seu website é executado em alguma outra porta livre em sua máquina, mas no adaptador de rede externo, não em localhost.

O problema é que o IIS Express (pelo menos no Windows 10) se liga a [::1]:port o que significa que escuta na porta IPv6. Você precisa levar isso em conta.

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

Espero que ajude.


Eu resolvi esse problema usando a abordagem de proxy reverso.

Eu instalei o servidor wamp e usei o recurso de proxy reverso simples do servidor web apache.

Eu adicionei uma nova porta para ouvir o servidor web Apache (8081). Então eu adicionei configuração de proxy como virtualhost para essa porta.

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

Isso foi o que fiz no Windows 10 com o Visual Studio 2015 para habilitar o acesso remoto, com http e https:

O primeiro passo é vincular seu aplicativo ao seu endereço IP interno. Execute cmd -> ipconfig para obter o endereço. Abra o arquivo /{project folder}/.vs/config/applicationhost.config e role 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 quiser:

<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 prompt de cmd 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 guia Web e clique em Create Virtual Directory . Se o Visual Studio não for executado como administrador, isso provavelmente falhará. Agora tudo deve funcionar.


Como um sidenote para isso:

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

Isso só funcionará nas versões em inglês do Windows. Se você estiver usando uma versão localizada, substitua "everyone" 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 (Create SDDL failed, Error: 1332)


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

O transportador permite que você teste aplicativos da Web a partir de tablets e telefones externos em 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


Nada funcionou para mim até que encontrei o https://github.com/icflorescu/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 é aberto no host local: 51123 e você deseja acessar no endereço IP externo xxxx: 81

Edit: Atualmente, estou usando o ngrok


Eu fiz todos esses passos e nada me ajudou. E o que eu preciso, é só rodar meu aplicativo via IIS Express ...

Espero que ajude.



A maneira mais simples e mais legal que encontrei foi usar (leva 2 minutos para configurar):

https://ngrok.com/

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

Isso é bom para mostrar coisas aos seus colegas de equipe remotos, sem mexer na configuração do IIS ou nos firewalls. Deseja interromper o acesso apenas para finalizar 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 no plano livre


Caso você precise de um método Distinto em várias propriedades, é possível conferir minha biblioteca PowerfulExtensions . Atualmente está em um estágio muito novo, mas você já pode usar métodos como Distinct, Union, Intersect, exceto em qualquer número de propriedades;

É assim que você usa:

using PowerfulExtensions.Linq;
...
var distinct = myArray.Distinct(x => x.A, x => x.B);




c# asp.net iis-express