System.Net.HttpListenerException: 无法侦听前缀 'http://localhost:8080
System.Net.HttpListenerException: Failed to listen on prefix 'http://localhost:8080
我运行正在使用来自Scott Allen's ASP.Net Fundamentals course
的以下代码
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:\EShared\Dev2015\WebA
ppScottAllen\ConsoleApplication1\ConsoleApplication1\Program.cs:line 12
Press any key to continue . . .
我 运行 任务管理器性能选项卡中的资源监视器,可以看到 8080 的侦听端口上有 2 个条目。
两者都具有图像=系统、PID=4、未指定 IPv6、协议 TCP、防火墙状态不允许、不受限制
我是监听端口的新手,如何让代码正常工作?
我通过卸载几个程序解决了这个问题。
不幸的是我没有测试每一个,所以我不知道是哪一个。
它们包括 Dropbox、Goto Assist、Goto Meeting 和 winforms 应用程序
遇到错误时:"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 是否配置为侦听您的应用程序尝试使用的特定端口。您需要注意该特定应用程序的 "Reserved 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 注册确实消失了。现在 运行 您的应用程序不应导致您之前看到的错误。
我遇到了同样的问题,这是一个愚蠢的修复。我打开了其他使用相同端口号的控制台应用程序,因此在关闭所有控制台应用程序后,我能够 运行 并且没有收到此错误。
我在 Visual Studio 中遇到了同样的错误,它很好地告诉我哪个端口有问题。然后我 运行 在管理员命令提示符中执行此命令:
netsh http delete urlacl url=http://+:44308/
注意:记住最后的斜杠很重要。否则会报错。
我运行正在使用来自Scott Allen's ASP.Net Fundamentals course
的以下代码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:\EShared\Dev2015\WebA
ppScottAllen\ConsoleApplication1\ConsoleApplication1\Program.cs:line 12
Press any key to continue . . .
我 运行 任务管理器性能选项卡中的资源监视器,可以看到 8080 的侦听端口上有 2 个条目。
两者都具有图像=系统、PID=4、未指定 IPv6、协议 TCP、防火墙状态不允许、不受限制
我是监听端口的新手,如何让代码正常工作?
我通过卸载几个程序解决了这个问题。 不幸的是我没有测试每一个,所以我不知道是哪一个。
它们包括 Dropbox、Goto Assist、Goto Meeting 和 winforms 应用程序
遇到错误时:"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 是否配置为侦听您的应用程序尝试使用的特定端口。您需要注意该特定应用程序的 "Reserved 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 注册确实消失了。现在 运行 您的应用程序不应导致您之前看到的错误。
我遇到了同样的问题,这是一个愚蠢的修复。我打开了其他使用相同端口号的控制台应用程序,因此在关闭所有控制台应用程序后,我能够 运行 并且没有收到此错误。
我在 Visual Studio 中遇到了同样的错误,它很好地告诉我哪个端口有问题。然后我 运行 在管理员命令提示符中执行此命令:
netsh http delete urlacl url=http://+:44308/
注意:记住最后的斜杠很重要。否则会报错。