2015-04-18 49 views
9

Używam następujący kod z Scott Allen's ASP.Net Fundamentals courseSystem.Net.HttpListenerException: Nie można słuchać na przedrostka „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!")); 
     } 
    } 
} 

Jednak kiedy uruchomić aplikację konsoli pojawia się komunikat

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

wpadłem monitor zasobów na karcie Performance Manager zadań i widzę, że są 2 wpisy na słuchaniu Porty do 8080.

Obie mają Obraz = System, PID = 4 , IPv6 nieokreślony, Protokół TCP, Stan zapory Niedozwolone, nie ograniczone

Jestem nowy w Listening Ports, w jaki sposób mogę uzyskać kod działa?

+0

Zastanawiam się, czy muszę zamknąć port http://stackoverflow.com/questions/8688949/how-to-close-tcp-and-udp-ports-via-windows-command-line Potrzebuję dobrego Informacje na temat portów i gniazd do nauki od –

+0

Porty i ruch TCP https://www.youtube.com/watch?v=AXrFCbD4-fU –

Odpowiedz

0

Udało mi się rozwiązać problem przez odinstalowanie kilku programów. Niestety nie testowałem po każdym, więc nie wiem, który to był.

Obejmowały one Dropbox, Goto Assist Goto Zgromadzenia oraz aplikacji WinForm

+0

Powinienem przeczytać to pierwsze http://stackoverflow.com/questions/48198/how -can-you-find-out-which-process-is-listening-on-a-port-on-windows? rq = 1, aby użyć netstat -a -b –

14

w obliczu błędu: "Failed to listen on prefix 'http://someURL:somePortNo/' because it conflicts with an existing registration on the machine." To naprawdę nie jest konieczne, że to aplikacja aktywnie nasłuchuje na tym porcie - więc wyjście Netstat -abno nie zawsze Wsparcie. Jeśli już zarejestrowana aplikacja jest uruchomiona, może pomóc ci zawęzić do której aplikacji powoduje problem, patrząc na informacje dostarczane przez Netstat.

Jednak błąd ten wystąpi nawet po zatrzymaniu danego wniosku, ponieważ błąd wskazuje na rejestrację. Dlatego prawidłowa komenda diagnostycznym jest:

netsh http show urlacl 

Musimy zbadać wydajność i sprawdzić, czy któryś z wymienionych zastrzeżonych adresów URL jest skonfigurowany do słuchania na określonym porcie aplikacja próbuje użyć. Należy zwrócić uwagę na wartość pola "Zarezerwowany adres URL" dla tej konkretnej aplikacji. Będziesz go potrzebować później do usunięcia rejestracji, która powoduje błąd.

Odinstalowanie tej konkretnej aplikacji - zakładając, że procedura deinstalacji nie obejmuje rejestracji - może rozwiązać problem. Możesz również zastosować bardziej bezpośrednie i precyzyjne podejście, używając polecenia usunięcia rezerwacji adresu URL:

(Uwaga: jeśli konflikt jest uzasadniony, może lepiej zmienić konfigurację aplikacji, aby zamiast tego odsłuchiwać na innym porcie.)

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

Gdy komenda działa widać wyjście: URL reservation successfully deleted.

Po ponownym uruchomieniu netsh http show urlacl zobaczysz, że rejestracja adresu URL rzeczywiście minęła. A teraz uruchomienie aplikacji nie powinno skutkować błędem, który widziałeś wcześniej.