Ho creato un’applicazione autoalimentata Nancy / SignalR ospitata in OWIN usando Microsoft.Owin.Host.HttpListener
e Microsoft.Owin.Hosting
Le cose funzionano perfettamente bene localmente ma non appena provo a utilizzare qualsiasi cosa tranne localhost per accedere all’app ottengo un HTTP Error 503. The service is unavailable
errore. Non riesco nemmeno ad accedere all’app utilizzando 127.0.0.1
o il nome del computer.
Ho provato ad aggiungere la porta a urlacl usando
http add urlacl http://*:8989/ user=EVERYONE
ma non sembra fare nulla.
ecco le opzioni di avvio di OWIN che ho provato,
var options = new StartOptions { Url = "127.0.0.1", App = GetType().AssemblyQualifiedName, Port = _configFileProvider.Port }; var options = new StartOptions { App = GetType().AssemblyQualifiedName, Port = _configFileProvider.Port };
ecco il codice sorgente per il file che avvia e arresta il server https://github.com/NzbDrone/NzbDrone/blob/vnext/NzbDrone/Owin/OwinHostController.cs
quindi risulta che è necessario passare un URL in StartOptions
nello stesso formato di urlacl.
La modifica delle opzioni di avvio del codice riportato di seguito ha risolto il problema. ora l’app è accessibile attraverso la rete.
var options = new StartOptions("http://*:8989") { ServerFactory = "Microsoft.Owin.Host.HttpListener" };
Trascorro molte ore a risolvere problemi simili su Windows 8.1.
StartOptions options = new StartOptions(); options.Urls.Add("http://localhost:9000"); options.Urls.Add("http://127.0.0.1:9000"); options.Urls.Add("http://192.168.0.102:9000"); options.Urls.Add(string.Format("http://{0}:9000", Environment.MachineName)); WebApp.Start(options);
Non ho potuto ascoltare o ho ricevuto l’errore 503 …
Se si desidera ascoltare su diversi indirizzi IP, ogni indirizzo ha bisogno del proprio record urlacl:
Non funziona:
netsh http>add urlacl http://+:9000/ user=EveryOne
OK:
netsh http>add urlacl http://localhost:9000/ user=EveryOne netsh http>add urlacl http://127.0.0.1:9000/ user=EveryOne etc.
Dopo aver aggiunto la prenotazione per ciascun indirizzo individualmente, tutto funziona correttamente.
Grazie alle informazioni che @ kay.one ha fornito, sono riuscito ad accedere alla mia API Web self-hosted 2.2 (OWIN / Katana, app per console) dalla stessa macchina tramite l’indirizzo IP. Tuttavia, basta consolidarlo in una semplice procedura dettagliata:
Main
of Program.cs (per app console): WebApp.Start("http://*:8080");
netsh http add urlacl http://*:8080/ user=EVERYONE
Dovresti quindi essere in grado di accedere da un’altra macchina usando l’indirizzo IP o il nome del computer.
Disclaimer: non sono un esperto di sicurezza quindi non conosco le implicazioni sulla sicurezza di questo.