.net - ¿Alternativa a HttpListener?
cassini (6)
Ok, entonces tienes una aplicación de escritorio normal que necesita permitir conexiones http entrantes - hmm - ¿no será el firewall de Windows un problema?
Suponiendo que no, suena casi como un servicio web, ¿podría seguir esa ruta? ¿Exponer las URL a través de eso? Aunque mi conocimiento de .Net no es lo suficientemente profundo como para saber si todavía necesita ejecutar un servidor http específico para responder a las solicitudes. Spring.Net probablemente valga la pena echarle un vistazo.
Estoy desarrollando una aplicación que hasta ahora está usando HttpListener para proporcionar un pequeño servidor http independiente. Sin embargo, recientemente descubrí que HttpListener necesita ejecutarse como administrador, lo que no siempre será posible.
¿Cuál sería la mejor alternativa? Necesito http GET y POST, que no son solo leer / escribir archivos en el sistema de archivos, sino que necesitan ejecutar un código .Net personalizado.
Mi investigación hasta ahora ha sacado a relucir a Cassini, pero hasta donde puedo decir, tendría que escribir una versión personalizada. ¿Hay algo mas? En partiular algo con la misma interfaz que HttpListener, pero que no requiere privilegios de administrador sería increíble!
Una alternativa que he encontrado es C # Webserver en CodePlex.
"... un servidor http flexible que puede integrarse en cualquier aplicación .Net. Tiene un diseño modular donde las características se agregan mediante módulos. El servidor también es compatible con REST y todos los verbos http ..."
Tiene una clase HttpListener que me imagino que es similar a System.Net.HttpListener, pero aún no he usado ninguno de ellos, así que no puedo estar seguro.
Al igual que el comentario de Will Dean en tu publicación, puedes ejecutar el siguiente comando netsh:
netsh http add urlacl url=http://+:8346/ user="NTAuthority/Authenticated Users" sddl="D:(A;;GX;;;AU)"
Sustituya el ''http: // +: 8346 /'' con su valor, y esto permitirá que cualquier usuario autenticado ejecute el servidor web en el punto final de destino.
Nowin es una gran lib que se puede integrar en Owin
como ServerFactory
sin dependencia en HttpListener
. Hemos podido reemplazar el Microsoft.Owin.Host.HttpListener
lib sin ningún problema
En cuanto a la declaración:
Recientemente descubrí que HttpListener necesita ejecutarse como administrador
Eso no es del todo cierto y algunas de las otras respuestas se refieren a una de las razones, pero hay otra:
- Observado por otros carteles: puede otorgar permisos a un no administrador. Bien, pero no genial.
- Puede escuchar en localhost, incluso en el puerto 80, sin ser un administrador. Nota: Recuerdo que solo funciona "localhost" y no "127.0.0.1" ... así que asegúrese de pasar localhost a su llamada Prefixes.Add.
Estamos enviando una herramienta interna que permite a los desarrolladores ejecutar un host de aplicación basado en HTTP en sus PC y al principio pensamos que usar HttpListener no sería posible debido al problema del administrador (o permisos concedidos por el administrador), pero luego descubrimos que localhost funciona bien sin ser un administrador. Tiene sentido: escuchar externamente es "peligroso", pero escuchar en la máquina local no es tan peligroso.
Una solución a esto está cubierta por esta otra pregunta : puede darse permisos para ejecutar HttpListener como no administrador.
Puede hacer que la aplicación se inicie desde un archivo de comando que ordena los permisos y luego ejecuta la aplicación real.