2015-04-18 28 views
9

sto facendo funzionare il seguente codice da Scott Allen's ASP.Net Fundamentals courseSystem.Net.HttpListenerException: Impossibile per l'ascolto su prefisso 'http: // localhost: 8080

using System; 
using Microsoft.Owin.Hosting; 
using Owin; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string uri = "http://localhost:8080"; 
      using (WebApp.Start<Startup>(uri)) 
      { 
       Console.WriteLine("Started!"); 
       Console.ReadKey(); 
       Console.WriteLine("Stopping!"); 
      } 
     } 
    } 

    public class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      app.UseWelcomePage(); 
      //app.Run(
      // ctx => ctx.Response.WriteAsync("Hello Owin!")); 
     } 
    } 
} 

Tuttavia quando faccio funzionare la console app ottengo un messaggio

Unhandled Exception: System.Reflection.TargetInvocationException: Exception has 
been thrown by the target of an invocation. ---> System.Net.HttpListenerExceptio 
n: Failed to listen on prefix 'http://localhost:8080/' because it conflicts with 
an existing registration on the machine. 
    at System.Net.HttpListener.AddAllPrefixes() 
    at System.Net.HttpListener.Start() 
    at Microsoft.Owin.Host.HttpListener.OwinHttpListener.Start(HttpListener liste 
ner, Func`2 appFunc, IList`1 addresses, IDictionary`2 capabilities, Func`2 logge 
rFactory) 
    at Microsoft.Owin.Host.HttpListener.OwinServerFactory.Create(Func`2 app, IDic 
tionary`2 properties) 
    --- End of inner exception stack trace --- 
    at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, 
Signature sig, Boolean constructor) 
    at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Objec 
t[] parameters, Object[] arguments) 
    at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invoke 
Attr, Binder binder, Object[] parameters, CultureInfo culture) 
    at Microsoft.Owin.Hosting.ServerFactory.ServerFactoryAdapter.Create(IAppBuild 
er builder) 
    at Microsoft.Owin.Hosting.Engine.HostingEngine.StartServer(StartContext conte 
xt) 
    at Microsoft.Owin.Hosting.Engine.HostingEngine.Start(StartContext context) 
    at Microsoft.Owin.Hosting.Starter.DirectHostingStarter.Start(StartOptions opt 
ions) 
    at Microsoft.Owin.Hosting.Starter.HostingStarter.Start(StartOptions options) 
    at Microsoft.Owin.Hosting.WebApp.StartImplementation(IServiceProvider service 
s, StartOptions options) 
    at Microsoft.Owin.Hosting.WebApp.Start(StartOptions options) 
    at Microsoft.Owin.Hosting.WebApp.Start[TStartup](StartOptions options) 
    at Microsoft.Owin.Hosting.WebApp.Start[TStartup](String url) 
    at ConsoleApplication1.Program.Main(String[] args) in e:\EShared\Dev2015\WebA 
ppScottAllen\ConsoleApplication1\ConsoleApplication1\Program.cs:line 12 
Press any key to continue . . . 

ho eseguito il monitor risorse dalla performance Tab Task manager e può vedere che ci sono 2 voci su porte in ascolto per 8080.

Entrambi hanno Immagine = sistema, PID = 4 , IPv6 non specificato, Protocollo TCP, Stato firewall Non consentito, non limitato

Sono nuovo ad Ascolto porte, come faccio a far funzionare il codice?

+0

Mi chiedo se devo chiudere la porta http://stackoverflow.com/questions/8688949/how-to-close-tcp-and-udp-ports-via-windows-command-line Ho bisogno di una buona riferimento su porte e socket per imparare da –

+0

Ports e traffico TCP https://www.youtube.com/watch?v=AXrFCbD4-fU –

risposta

0

Sono stato in grado di risolvere il problema disinstallando diversi programmi. Purtroppo non ho fatto il test dopo ciascuno, quindi non so quale fosse.

hanno incluso Dropbox, Goto Assist, GoToMeeting e un'applicazione WinForms

+0

Avrei dovuto leggere questo primo http://stackoverflow.com/questions/48198/how -can-you-find-out-which-process-è-listening-on-a-port-on-windows? rq = 1 per utilizzare netstat -a -b –

14

Di fronte a errore: "Failed to listen on prefix 'http://someURL:somePortNo/' because it conflicts with an existing registration on the machine." In realtà non è necessario che ci sia un programma ascolto attivo su quella porta - in tal modo di uscita del Netstat -abno non possono sempre Aiuto. Se l'applicazione già registrata è in esecuzione, può aiutarti a limitare a quale applicazione sta causando il problema osservando le informazioni fornite da Netstat.

Tuttavia, si otterrà questo errore anche dopo che l'applicazione in questione è stata interrotta poiché l'errore indica una registrazione. Il comando di diagnosi corretta è quindi:

netsh http show urlacl 

Dobbiamo esaminare l'output e controllare se una delle URL riservati elencato è configurato per l'ascolto sulla porta specifica l'applicazione sta cercando di utilizzare. È necessario annotare il valore del campo "URL riservato" per quella specifica applicazione. Ne avrai bisogno in seguito per eliminare la registrazione che sta causando l'errore.

La disinstallazione di questa specifica applicazione, presupponendo che la procedura di disinstallazione includa una mancata registrazione, potrebbe risolvere il problema. In alternativa, puoi utilizzare un comando più diretto e preciso per eliminare una prenotazione URL:

(nota che se il conflitto è legittimo, potrebbe essere preferibile riconfigurare l'applicazione per l'ascolto su una porta diversa.)

netsh http delete urlacl url=<<>value of "Reserved URL" in the output of netsh http show urlacl <>> 

Quando il comando funziona si vedrà in uscita: URL reservation successfully deleted.

Dopo aver eseguito netsh http show urlacl una seconda volta, ora vedrete che la registrazione dell'URL è effettivamente andata. E ora l'esecuzione della tua applicazione non dovrebbe comportare l'errore che stavi vedendo in precedenza.

Problemi correlati