c# - ¿HttpListener funciona bien en Mono?
(2)
Estoy buscando escribir un pequeño servicio web para ejecutarlo en una pequeña caja de Linux. Prefiero codificar en C #, entonces estoy buscando usar Mono.
No quiero la sobrecarga de ejecutar un servidor web completo o la versión de ASP.NET de Mono. Estoy pensando en tener un solo proceso con un hilo que trata con cada conexión de cliente. Memoria compartida entre hilos en lugar de una base de datos.
He leído un poco sobre la versión de Microsoft de HttpListener y cómo funciona con el controlador Http.sys. Por desgracia, la documentación de Mono en esta clase es solo la interfaz de clase automatizada sin discusión de cómo funciona bajo el capó. (Linux no tiene Http.sys, así que imagino que se implementa de manera sustancialmente diferente).
¿Alguien podría indicarme algunos recursos para discutir este módulo, por favor?
Muchas gracias, Bill, billpg.com
(Un poco de antecedentes a mi pregunta para los interesados.)
Hace algún tiempo, hice esta pregunta , interesado en mantener una larga conversación abierta con un montón de ida y vuelta. Me decidí a diseñar mi propio protocolo ad-hoc, pero las personas con las que hablé realmente querían una interfaz REST, incluso a costa de la señal "De acuerdo, envíe su comando ahora".
Entonces, me pregunté acerca de ejecutar ASP.NET en un servidor Linux / Mono, pero tropecé con HttpListener. Esto parecía ideal, ya que cada "conversación" podía ejecutarse en un hilo separado. El subproceso que llama a HttpListener en un bucle puede buscar para qué subproceso es para cada conexión entrante y pasar la referencia a ese subproceso.
La alternativa para un servicio conducido por ASP.NET, sería que el código ASPX recoja el estado de una base de datos y vuelva a escribir el nuevo estado cuando finalice. Sí, funcionaría, pero eso es un montón de gastos generales.
No estoy seguro de por qué quieres mirar tan profundamente en la capucha. Incluso en el lado de Microsoft, los documentos sobre http.sys pueden no proporcionarle información realmente valiosa si está utilizando .NET Framework.
Para saber si algo funciona en Mono lo suficientemente bueno, siempre debe descargar su imagen de VMware o VPC y probar sus aplicaciones en él.
http://www.go-mono.com/mono-downloads/download.html
Aunque Mono es mucho más maduro que hace unos años, no podemos decir que haya sido probado por suficientes aplicaciones del mundo real como Microsoft.NET. Entonces, pruebe sus solicitudes y envíe los problemas que encuentre al equipo de Mono.
Según mi experiencia, los problemas menores se solucionan en solo unos pocos días, mientras que para los problemas más importantes lleva más tiempo. Pero con el código fuente de Mono disponible, puedes arreglarlo por tu cuenta o encontrar buenas soluciones la mayoría de las veces.
Saludos, la clase HttpListener en Mono funciona sin mucho problema. Creo que la diferencia más significativa entre su uso en un entorno de MS y un entorno de Linux es que el puerto 80 no se puede enlazar sin una seguridad de root / su / sudo. Otros puertos no tienen esta restricción. Por ejemplo, si especifica el prefijo: http://localhost:1234/
el HttpListener funciona como se esperaba. Sin embargo, si agrega el prefijo http://localhost/
, que espera escuchar en el puerto 80, falla silenciosamente. Si intenta enlazar explícitamente con el puerto 80 ( http: // localhost: 80 / ), arroja una excepción. Si invoca su aplicación como superusuario o root, puede enlazar explícitamente al puerto 80 ( http: // localhost: 80 / ).
Todavía no he explorado el resto de los miembros de HttpListener con suficiente detalle para hacer comentarios útiles acerca de qué tan bien funciona en un entorno Linux. Sin embargo, si hay interés, continuaré publicando mis observaciones.
sándwich de pollo