私のコンピューターは、ポート 80 を (ポート 80 として) 転送するルーターの背後にあります。私の問題は、HttpListener が外部 IP アドレス宛てのリクエストを無視しているように見えることです。
問題はルーターではありません。空の C# コンソール プロジェクトを作成し、次のコード行のみを追加するとします。
System.Net.Sockets.TcpListener s = new System.Net.Sockets.TcpListener(System.Net.IPAddress.Any, 80);
s.Start();
System.Net.Sockets.TcpClient c = s.AcceptTcpClient();
...そしてプログラムを実行します[注: このプログラムを初めて実行するとき、ユーザーはファイアウォールの例外を許可する必要がある場合があります]、に移動すると終了します
http://localhost/testpath/
ブラウザで、またはに移動した場合
http://externalipaddress/testpath/
私のブラウザでは、どちらのアドレスもポート 80 接続を正常に試行します。これで、すべてが適切に設定されました。このコンピュータは、ポート 80 で内部接続と外部接続を受け入れることができます。
ここで、別の空の C# コンソール プロジェクトを作成し、次のコード行のみを追加するとします。
System.Net.HttpListener s = new System.Net.HttpListener();
s.Prefixes.Add("http://+:80/testpath/");
s.Start();
System.Net.HttpListenerContext c = s.GetContext();
...最初に、この質問で言及されている問題のためにアクセスが拒否されたことを示す HttpListenerException が表示されます。その後、Visual Studio を閉じて管理者として再度開くと、正しく実行されます。に移動すると、プログラムは(適切に)終了します
http://localhost/testpath/
ただし、に移動すると、リクエストがタイムアウトするだけです
http://externalipaddress/testpath/
HttpListener への外部リクエストがタイムアウトになるのはなぜですか? 結果は、「externalipaddress」の数値 IP アドレスまたはドメイン名、サブフォルダー、スラッシュなどの多くの順列、およびプレフィックス「http://*:80/testpath/」、「http: //externaldomain:80/testpath/" および "http: //externalipaddress:80/testpath/" (スペースなし。stackoverflow フォーマット用に追加)。