Системы.Чистая.Исключения httplistenerexception: не удалось прослушать префикс 'http://localhost:8080



Я запускаю следующий код из Скотта Аллена ASP.Net курс основ



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


Однако при запуске консольного приложения я получаю сообщение



    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:ESharedDev2015WebA
ppScottAllenConsoleApplication1ConsoleApplication1Program.cs:line 12
Press any key to continue . . .


Я запустил Монитор ресурсов с вкладки производительность Диспетчера задач и вижу, что есть 2 записи на прослушивающих портах для 8080.



Оба имеют Image=System, PID=4, IPv6 не указан, протокол TCP, состояние брандмауэра не разрешено, не ограничено



Я новичок в прослушивании портов, как я могу получить код работает?

613   2  

2 ответов:

Столкнувшись с ошибкой: "Failed to listen on prefix 'http://someURL:somePortNo/' because it conflicts with an existing registration on the machine." на самом деле не обязательно, что есть приложение, активно прослушивающее этот порт - таким образом, вывод Netstat -abno не всегда может помочь. Если уже зарегистрированное приложение запущено, это может помочь вам сузить круг приложений, вызывающих проблему, посмотрев на информацию, предоставляемую Netstat.

Однако вы получите эту ошибку даже после того, как данное приложение будет остановлено, так как ошибка указывает на регистрацию. Правильная диагностическая команда поэтому есть:

netsh http show urlacl

Нам нужно изучить выходные данные и проверить, настроен ли какой-либо из перечисленных зарезервированных URL-адресов для прослушивания конкретного порта, который пытается использовать ваше приложение. Вы должны отметить значение поля "зарезервированный URL" для этого конкретного приложения. Он понадобится вам позже для удаления регистрации, которая вызывает ошибку.

Удаление этого конкретного приложения-при условии, что их процедура удаления включает в себя отмену регистрации-может решить проблему. проблема. В качестве альтернативы вы можете использовать более прямой и точный подход, используя команду для удаления резервирования URL:

(обратите внимание, что если конфликт правомерен, возможно, лучше перенастроить приложение для прослушивания на другой порт.)

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

Когда команда сработает, вы увидите вывод: URL reservation successfully deleted.

После запуска netsh http show urlacl во второй раз вы увидите, что регистрация url действительно исчезла. И теперь запускать ваше приложение не следует приведите к ошибке, которую вы видели ранее.

Я смог решить эту проблему, удалив несколько программ. К сожалению, я не проверял после каждого, поэтому я не знаю, что это было.

Они включали Dropbox, goto Assist, goto Meeting и приложение winforms

Comments

    Ничего не найдено.