Come accedere in remoto al servizio Nancy ospitato da sé?

Sto creando un semplice servizio Windows che ospita un’istanza Nancy per fornire viste dei suoi dati interni. Tutto funziona come previsto quando si utilizza un browser sul computer locale; Vedo la vista che serve. Tuttavia, non riesco a trovare alcun motivo per cui non accederà da un browser remoto (sulla stessa rete). L’accesso da un browser remoto semplicemente ritarda un po ‘; Alla fine, IE visualizzerà “Questa pagina non può essere visualizzata”; Safari su un iPad mostra la barra di avanzamento parziale per un po ‘e non fa nulla.

Sono vincolante usando tutti gli IP locali, non solo localhost. Sto usando la funzione GetUriParams() a questo link per scoprire tutti gli indirizzi IP locali per il binding. http://www.codeproject.com/Articles/694907/Embed-a-web-server-in-a-windows-service

 _nancyHost = new NancyHost(GetUriParams(port)); _nancyHost.Start(); 

Ho scoperto in questa pagina che il binding a localhost funziona solo per l’accesso locale. http://forums.asp.net/t/1881253.aspx?More+SelfHost+Documentation

Gli IP rilevati da questa funzione sono per adattatore Ethernet, adattatore wireless e due adattatori di rete VMware da un’installazione precedente di un lettore VMware. Ho provato l’accesso remoto sia per nome della macchina che per IP letterale alla scheda Ethernet.

Ho aggiunto voci alla lista urlacl. Ho usato il netsh http add urlacl come raccomandato in molti posti, incluso a questo link: Accesso remoto a un Nancy Self Host

Se netsh http show urlacl , vedo la voce per la porta che sto usando.

Ho provato diverse configurazioni di Nancy Se ho impostato l’opzione di configurazione di Nancy per UrlReservations.CreateAutomatically, riceverò prompt di sicurezza, che dopo averlo permesso, vedo nuove voci in netsh http show urlacl dell’elenco netsh http show urlacl per tutti gli IP locali, ma non lo fa ancora consentire l’accesso remoto. Ho anche provato l’opzione RewriteLocalHost true e false.

Ho provato ad avviare Nancy con http://+:3684 o http://*:3684 (che ottiene l’eccezione di parsing da Uri() ) e con http://0.0.0.0:3684 (che ottiene l’eccezione da AddAllPrefixes() all’interno di HttpListener() ).

Ho aggiunto il firewall EXE a Windows Ho creato eccezioni firewall come descritto qui: https://msdn.microsoft.com/en-us/library/ms733768.aspx

La regola associata mostra Privato, Pubblico e “Qualsiasi” per ogni colonna con TCP e UDP.

Ho provato a eseguire Nancy in diversi ambienti. Ho eseguito il codice in: il servizio Windows in esecuzione come sistema locale, un’app console all’interno del debugger di Visual Studio 2013 e l’app della console Esegui come amministratore.

Immagino sia una semplice impostazione di sicurezza, ma ho cercato su Google e cercato e provato varie cose per un paio di giorni.

Cosa mi manca?

Questa risposta ha fornito l’indizio di cui avevo bisogno. https://stackoverflow.com/a/21364604/1139376

Questo perché HttpListener è costruito su http.sys che ascolterà sulla porta che hai specificato per conto del tuo programma.

Non era il mio EXE a fare l’ascolto vero e proprio. Tutto quello che dovevo fare era aggiungere una regola in entrata al set di Windows Firewall per il programma “Sistema” e la specifica porta TCP che sto usando. Questo ha permesso l’accesso remoto.

Usa la HostConfiguration e lascia che Nancy faccia automaticamente le prenotazioni dell’URL per te.

 var config = new HostConfiguration { RewriteLocalhost = true, UrlReservations = new UrlReservations { CreateAutomatically = true } }; host = new NancyHost(new Uri("http://localhost:8080"), new DefaultNancyBootstrapper(), config); host.Start(); 

Si noti che questo costringerà ACL a creare regole di rete per le nuove porte se non esistono già.