web-dev-qa-db-ja.com

System.Net.HttpListenerException:プレフィックス 'http:// localhost:8080でのリッスンに失敗しました

Scott AllenのASP.Net Fundamentalsコース から次のコードを実行しています

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つのエントリがあることがわかります。

両方ともImage = System、PID = 4、IPv6の指定なし、プロトコルTCP、ファイアウォールステータス許可なし、制限なし

リスニングポートは初めてですが、どのようにコードを機能させることができますか?

20
Kirsten Greed

エラーに直面したとき:"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登録が実際になくなっていることがわかります。そして今、アプリケーションを実行しても、以前に表示されていたエラーは発生しません。

35
shivesh suman

複数のプログラムをアンインストールすることで問題を解決できました。残念ながら、私はそれぞれの後にテストしなかったので、それがどれであったかわかりません。

Dropbox、Goto Assist、Goto Meeting、winformsアプリケーションが含まれていました

1
Kirsten Greed

私は同じ問題を抱えていましたが、それはばかげた修正でした。同じポート番号を使用している他のコンソールアプリを開いていたため、すべてのコンソールアプリを閉じた後、実行でき、このエラーは発生しませんでした。

0
nihnih