2010-01-01 18 views
6

Win 7 y VS2010 B2. Estoy intentando escribir un servidor web mínimo usando el HttpListener incorporado. Sin embargo, sigo obteniendo una excepción AccessDenied. Aquí está el código:¿Por qué recibo "AccessDenied" cuando trato de usar HttpListener?

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); 
    } 

que pudiera entender la necesidad de ejecutar como administrador si estaba unión a un puerto del sistema, pero no veo por qué mi unión a 9669 debería requerir permisos especiales.

¿Alguna idea?

Respuesta

23

Gracias a esta cuestión de forma: Can I listen on a port (using HttpListener or other .NET code) on Vista without requiring administrator priveleges?

que tienen una respuesta.

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

Crazy. Aquí está mi función revisada:

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); 
    } 
+1

más seguridad para todos nosotros para aprender –

+0

sí parece que realmente necesita el 'escuchar = yes'. Trabajó para mí sin eso. Además, utilicé 'http: // +: 9669 /'. –

Cuestiones relacionadas