Siempre que desarrollamos una aplicación tenemos que tener en cuenta que nuestra aplicación sólo debe disponer de los mínimos privilegios necesarios. Tener en cuenta esta situación provoca que sea un poco más complicado la configuración de nuestra aplicación.
Cuando tiene privilegios de administrador todo va muy bien, pero cuando se cambia habitualmente surgen problemas que no siempre son fáciles de diagnosticar.
Uno de los puntos importantes a tener en cuenta cuando desarrollamos un servicio WCF es que, por defecto, para poder registrar un listener HTTP es necesario disponer de privilegios de administrador.
Si estamos desarrollando un servicio que está hosteado en un servicio windows es recomendable que el servicio windows corra como NetworkService en lugar de usar los privilegios de LocalSystem. Si usamos NetworkService y exponemos algún endpoint HTTP, aunque sean los metadatos del servicio, tendremos un problema de permisos y el host no podrá arrancar correctamente dando una excepción de acceso denegado ( AddressAccessDeniedException ) indicando que no puede registrar la URL http.
La solución es fácil; hay que dar permisos al usuario NetworkService para que puede registrar la URL. Ahora veremos cómo.
En Windows XP y Windows 2003 se necesita disponer de la utilidad httpcfg. Es necesario instalar las Windows Supports Tools para poder disponer de él. Lo podeis descargar de aquí.
Mediante esta utilidad se puede establecer los permisos de acceso a una determinada URL. El acceso se da usando una lista ACL, donde se indica el usuario ( Sid ) y los permisos que tiene ( lectura, ejecución…)
httpcfg set urlacl /u http://+:8080/services/example /a D:(A;;GA;;;NS)
La sintaxis completa de httpcfg la podéis ver aquí.
Si el sistema operativo que usáis es Vista, la utilidad que debéis emplear es netsh.
add urlacl url=http://+:8080/services/example user=NetworkService
Una vez que hayáis hecho esto el host podrá registrar correctamente el listener http y arrancar sin problemas.
Para quien le pueda servir, en Microsoft hay una información muy interesante también aparte de estos excelentes comentarios:
http://msdn2.microsoft.com/en-us/library/ms733768.aspx
Me he dado cuenta de que falta una cosa. Es netsh http add.
Falta el http para establecer el contexto correcto
hola yo soy administrador pero no me sale que no tengo los permisos de administrador me pediais ayudar!!! mi msn es oscar_nano14@hotmail.com gracias