Why am I getting "AccessDenied" when I try to use an HttpListener?

Win 7 and VS2010 B2. I am trying to write a minimal web server using the built-in HttpListener . However, I keep getting an AccessDenied exception. Here is the code:

  int Run(string[] args) { _server = new HttpListener(); _server.Prefixes.Add("http://*:9669/"); _server.Start(); Console.WriteLine("Server bound to: {0}", _server.Prefixes.First()); _server.BeginGetContext(HandleContext, null); } 

I could understand what needs to be run as administrator if I bind to the system port, but I do not understand why my binding to 9669 should require special permissions.

Any ideas?

+6
web-services sockets
source share
1 answer

Thanks to this SO question: Can I listen on a port (using an HttpListener or other .NET code) on Vista without requiring administrative privileges?

I have an answer.

  netsh http add urlacl url = http: // *: 9669 / user = fak listen = yes 

Are crazy. Here is my revised function:

  int Run(string[] args) { var prefix = "http://*:9669/"; var username = Environment.GetEnvironmentVariable("USERNAME"); var userdomain = Environment.GetEnvironmentVariable("USERDOMAIN"); _server = new HttpListener(); _server.Prefixes.Add(prefix); try { _server.Start(); } catch (HttpListenerException ex) { if (ex.ErrorCode == 5) { Console.WriteLine("You need to run the following command:"); Console.WriteLine(" netsh http add urlacl url={0} user={1}\\{2} listen=yes", prefix, userdomain, username); return -1; } else { throw; } } Console.WriteLine("Server bound to: {0}", _server.Prefixes.First()); _server.BeginGetContext(HandleContext, null); } 
+23
source

All Articles