我的计算机位于将端口 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 说 Access is denied because of the questions in this question。然后,当我关闭 Visual Studio 并以管理员身份重新打开它时,它将正常运行。当我导航到时,程序将(正确)终止
http://localhost/testpath/
但是,如果我导航到,我的请求就会超时
http://externalipaddress/testpath/
为什么我对 HttpListener 的外部请求超时? 结果可通过数字 IP 地址或“externalipaddress”域名以及子文件夹、斜杠等的许多排列以及前缀“http://*:80/testpath/”、“http: //externaldomain:80/testpath/”和“http://externalipaddress:80/testpath/”(无空格;为stackoverflow格式添加)。