2010-04-02 12 views
7

Estoy tratando de utilizar C# y HttpListener con un prefijo de que no sea localhost nada y se produce un error (es decir, si se lo doy nada, es decir,.NET HttpListener tema Prefijo con otra cosa que localhost

http://localhost:1234 obras, sino

http://server1:1234 falla

El código es ...

HttpListener listener = new HttpListener(); 
String prefix = @"http://server1:1234"; 
listener.Prefixes.Add(prefix); 
listener.Start(); 

El failu re ocurre en listener.Start() con la excepción de Access is denied..

Respuesta

3

¿Su aplicación se está ejecutando con privilegios elevados?

Las cuentas normales no pueden enlazar la tubería Http sin antes hacer una reserva.

http://msdn.microsoft.com/en-us/library/Aa364673

Se puede hacer mediante programación durante la instalación. Avíseme si esto es de interés y extraeré algún código.

EDIT:

En realidad, ya que no puedo identificar dónde el código de vino de por el momento, no puedo publicar aquí. Hay un codeplex project for doing this kind of thing que definitivamente vale la pena separar.

/EDIT

Aquí está una manera hacer la reserva en la línea de comandos:

http://www.casadehambone.com/HowToAddAURLACLAndAvoidAddressAccessDeniedExceptionInWindowsVista.aspx

+1

Sub-pregunta: ¿se puede contar con no tener que hacer una reserva para 'http: // localhost: { puerto}/'? En Win7, puedo escuchar en el puerto sin reservar, pero ya he instalado un montón de cosas y no he probado en stock de Windows 7. Además, me pregunto cuál es la política de Windows Vista y Windows XP SP2. Estaría encantado si localhost fuera un caso especial del que no tuviera que preocuparme. –

8

que tenían el mismo problema de una vez he resuelto mediante la adición de una reserva de direcciones URL para el espacio de nombres URL especificada para un usuario/usuarios a la Concha de red (netsh). He aquí un ejemplo de cómo reserv una URL para cada usuario, ejecutar esto en el símbolo del sistema como administrador:

netsh http add urlacl url=http://server1:1234/ user=Everyone 

He aquí un ejemplo de cómo reserv una URL para un usuario, ejecute esto en el símbolo del sistema como administrador:

netsh http add urlacl url=http://server1:1234/ user=Steve 

de esta manera no es necesario para ejecutar la aplicación como administrador

+0

¿Qué hace esto realmente? 'netsh http add urlacl url = http: // server1: 1234 /' ¿Es como usar el archivo de hosts? –

+0

@RoyiNamir No, el shell de red ('netsh') es una utilidad de línea de comandos que le permite configurar y visualizar el estado de varias funciones y componentes del servidor de comunicaciones de red. 'http add urlacl url = http: // server1: 1234 /' reserva la URL especificada para usuarios y cuentas que no son administradores. En este caso 'user = Everyone' para cada cuenta. – ClydeFrog

Cuestiones relacionadas