Mein Computer befindet sich hinter einem Router, der Port 80 an ihn weiterleitet (als Port 80). Mein Problem ist, dass HttpListener anscheinend Anfragen ignoriert, die an die externe IP-Adresse adressiert sind.Warum ignoriert HttpListener externe Anforderungen?
Das Problem ist nicht mit dem Router; wenn ich ein leeres C# Konsole-Projekt erstellen und nur die folgenden Codezeilen hinzu:
System.Net.Sockets.TcpListener s = new System.Net.Sockets.TcpListener(System.Net.IPAddress.Any, 80);
s.Start();
System.Net.Sockets.TcpClient c = s.AcceptTcpClient();
... und starten Sie das Programm [Anmerkung: das erste Mal dieses Programm ausgeführt wird, kann der Benutzer muss einer Firewall zulassen Ausnahme], wird es beenden, wenn ich
http://localhost/testpath/
in meinem Browser navigieren oder wenn ich zu
http://externalipaddress/testpath/
in meinem Browser navigieren - entweder Adresse versucht erfolgreich einen Anschluss 80 Anschluss. Also, alles richtig eingestellt ist - dieser Computer interne und externe Verbindungen auf Port akzeptieren 80.
Nun, wenn ich einen anderen Rohling C# Konsole-Projekt erstellen und fügen Sie nur die folgenden Codezeilen:
System.Net.HttpListener s = new System.Net.HttpListener();
s.Prefixes.Add("http://+:80/testpath/");
s.Start();
System.Net.HttpListenerContext c = s.GetContext();
... zuerst bekomme ich eine HttpListenerException, die besagt, dass Access aufgrund der in this question genannten Probleme verweigert wird. Dann wird es ordnungsgemäß ausgeführt, wenn ich Visual Studio schließe und es erneut als Administrator öffne. Das Programm wird (richtig) beenden, wenn ich navigieren zu
http://localhost/testpath/
jedoch meine Bitte einfach mal aus, wenn ich
http://externalipaddress/testpath/
navigieren Warum meine externe Anfrage Httplistener Zeit aus? Das Ergebnis ist reproduzierbar mit einer numerischen IP-Adresse oder einem Domänennamen für 'externe IP-Adresse' sowie vielen Permutationen von Unterordnern, Schrägstrichen usw. und auch für die Präfixe "http: // *: 80/testpath /", "http : // externaldomain: 80/testpath/"und" http: // externalipadresse: 80/testpath/"(keine Leerzeichen; hinzugefügt für Stackoverflow-Formatierung).
Haben Sie Ihren ISP gefragt, ob er eingehende Verbindungen an Port 80 blockiert? Es ist ungewöhnlich, aber manche tun es. Versuchen Sie auch, Ihre externe IP-Adresse aufzulösen, so dass sie auf 'homeusr51363_516.your_isp.com' oder ähnlich lautet. – rath
Wenn mein ISP eingehende Verbindungen blockiert, wie wäre der Erfolg des ersten Codes (der über die externe IP-Adresse mit Port 80 verbunden ist) erklärt? Wie bereits erwähnt, habe ich versucht, eine numerische IP-Adresse und einen auflösbaren Domainnamen in den Browseranfragen zu verwenden. – Ben