web-dev-qa-db-fra.com

System.Net.HttpListenerException: échec de l'écoute sur le préfixe 'http: // localhost: 8080

J'exécute le code suivant à partir de cours sur les principes fondamentaux d'ASP.Net de Scott Allen

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!"));
        }
    }
}

Cependant, lorsque j'exécute l'application console, je reçois un message

    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 . . .

J'ai exécuté le moniteur de ressources à partir de l'onglet Performances du gestionnaire de tâches et je peux voir qu'il y a 2 entrées sur les ports d'écoute pour 8080.

Les deux ont Image = Système, PID = 4, IPv6 non spécifié, Protocole TCP, État du pare-feu Non autorisé, non limité

Je suis nouveau sur les ports d'écoute, comment faire fonctionner le code?

20
Kirsten Greed

Face à une erreur: "Failed to listen on prefix 'http://someURL:somePortNo/' because it conflicts with an existing registration on the machine." Il n'est pas vraiment nécessaire qu'une application écoute activement sur ce port - donc la sortie de Netstat -abno peut ne pas toujours aider. Si l'application déjà enregistrée est en cours d'exécution, elle peut vous aider à identifier l'application à l'origine du problème en consultant les informations fournies par Netstat.

Cependant, vous obtiendrez cette erreur même après l'arrêt de l'application en question car l'erreur indique un enregistrement. La commande de diagnostic correcte est donc:

netsh http show urlacl

Nous devons examiner la sortie et vérifier si l'une des URL réservées répertoriées est configurée pour écouter sur le port spécifique que votre application essaie d'utiliser. Vous devez noter la valeur du champ "URL réservée" pour cette application spécifique. Vous en aurez besoin plus tard pour supprimer l'enregistrement à l'origine de l'erreur.

La désinstallation de cette application spécifique - en supposant que sa procédure de désinstallation inclut une désinscription - peut résoudre le problème. Vous pouvez également adopter une approche plus directe et précise de l'utilisation de la commande pour supprimer une réservation d'URL:

(Notez que si le conflit est légitime, il peut être préférable de reconfigurer votre application pour écouter sur un autre port à la place.)

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

Lorsque la commande fonctionne, vous verrez la sortie: URL reservation successfully deleted.

Lors de l'exécution netsh http show urlacl une deuxième fois, vous verrez que l'enregistrement de l'URL a bel et bien disparu. Et maintenant, l'exécution de votre application ne devrait pas entraîner l'erreur que vous voyiez plus tôt.

35
shivesh suman

J'ai pu résoudre le problème en désinstallant plusieurs programmes. Malheureusement, je n'ai pas testé après chacun, donc je ne sais pas lequel c'était.

Ils comprenaient Dropbox, Goto Assist, Goto Meeting et une application Winforms

1
Kirsten Greed

J'ai eu le même problème, et c'était une solution idiote. J'avais d'autres applications de console ouvertes qui utilisaient le même numéro de port, donc après avoir fermé toutes les applications de console, j'ai pu exécuter et n'ai pas eu cette erreur.

0
nihnih