Website-Icon Digital Native

C# – HttpListener Zugriff Verweigert Fehler beheben

C Sourcecode

„Kolja, ich brauch mal rasch einen HTTP Server.“ – „Klar, kein Problem.“

Oder doch?

HTTPListener httpListener = new HttpListener();
httpListener.Prefixes.Add("http://127.0.0.1:80/");
httpListener.Start(); //Throws Exception

Bling,System.Net.HttpListenerException – Zugriff Verweigert – Error 5  usw.usf. Zunächst dachte ich, dass da doch bestimmt wieder ein Programm sich bereits meinen Port geschnappt hat und ich deswegen den Fehler erhalte. Ich hatte sofort Skype im Verdacht, musste mich aber bei diesem entschuldigen, Skype war nicht der Bösewicht. Der Port war frei und dennoch grinste mich der Fehler an. Anscheinend gibt es da eine Windows-Einschränkung, dass man sich nur mit bestimmten Rechten an diese Ports binden darf. Das erreicht man entweder, indem man sein Programm selbst mit Administratorrechten startet oder aber man führt folgendes Kommando in einer Adminshell aus:

netsh http add urlacl url=http://+:80/ user=DOMAIN\Username listen=yes

Zu beachten ist hierbei, dass der url Parameter exakt dem Präfix des HttpListeners gleicht, sonst wird das nix. Den obigen Code veränderte wie folgt:

HTTPListener httpListener = new HttpListener();
httpListener.Prefixes.Add("http://+:80/");
httpListener.Start();

Nun lief alles wie es sollte. Da man nach dem Spielen aber stets wieder aufräumen sollte, kann man den URLACL Eintrag natürlich auch wieder aus dem System entfernen:

netsh http delete urlacl http://+:80/

Done;

Die mobile Version verlassen