Pregunta

Estoy buscando para escribir un pequeño servicio web para funcionar en una pequeña caja de Linux. Yo prefiero código en C #, así que estoy deseando utilizar Mono.

No quiero que los gastos generales de funcionamiento de un servidor web completa o versión de Mono de ASP.NET. Estoy pensando en tener un solo proceso con un tráfico de hilo con cada conexión de cliente. Memoria compartida entre los hilos en lugar de una base de datos.

He leído un poco en la versión de Microsoft de HttpListener y cómo funciona con el controlador HTTP.sys. Por desgracia, la documentación del Mono en esta clase es sólo la interfaz de clase automatizado sin discusión de cómo funciona bajo el capó. (Linux no tiene http.sys, así que me imagino que está implementado sustancialmente diferente.)

¿Podría mi punto cualquiera hacia algunos recursos discutiendo este módulo por favor?

Muchas gracias, Bill, billpg.com

(Un poco de historia a mi pregunta para el interesado.)

Hace algún tiempo, me preguntó esta pregunta , interesado en mantener una larga conversación abierta con un montón de ida y vuelta. Yo había asentado en el diseño de mi propio protocolo ad hoc, pero la gente que he hablado realmente quería una interfaz REST, aun a costa de la señal "Está bien, enviar el comando de ahora".

Por lo tanto, me preguntaba acerca de la ejecución de ASP.NET en un servidor Linux / Mono, pero topé con HttpListener. Este ideal parecido, ya que cada "conversación" podría funcionar en un hilo separado. El hilo que las llamadas HttpListener en un bucle pueden buscar que hilo cada conexión incomming es para y pasan la referencia a este hilo.

La alternativa para un servicio impulsado ASP.NET, sería tener el código ASPX recoger el estado de una base de datos y escribir de nuevo el nuevo estado cuando se termine. Sí, que funcionaría, pero eso es un montón de gastos.

¿Fue útil?

Solución

Saludos, La clase HttpListener en mono de trabajo sin mucho problema. Creo que la diferencia significativa entre la mayor parte de su uso en un entorno MS y un entorno Linux es que el puerto 80 no se puede enlazar a un sin / su / sudo la seguridad de la raíz. Otros puertos no tienen esta restricción. Por ejemplo, si se especifica el prefijo: http://localhost:1234/ la HttpListener funciona como se espera. Sin embargo, si se agrega el http://localhost/ prefijo, que se puede esperar para escuchar en el puerto 80, se produce un error en silencio. Si intenta explícitamente a enlazar con el puerto 80 ( http: // localhost: 80 / ) entonces se producirá una excepción. Si se invoca su aplicación como superusuario o root, puede unirse de forma explícita al puerto 80 ( http: // localhost: 80 / ).
Todavía no he explorado el resto de los miembros HttpListener con suficiente detalle para hacer comentarios útiles acerca de lo bien que funciona en un entorno Linux. Sin embargo, si hay interés, voy a seguir para publicar mis observaciones.

chickenSandwich

Otros consejos

No estoy seguro de por qué quiere mirar tan profundo en el capó. Incluso en el lado de Microsoft, los documentos sobre http.sys no le pueden proporcionar información valiosa de verdad si está utilizando el .NET Framework.

Para saber si algo funciona en Mono suficientemente bueno, que siempre se supone que descarga su imagen VMware o VPC, y probar sus aplicaciones en él.

http://www.go-mono.com/mono-downloads /download.html

A pesar de Mono es mucho más maduro que hace unos años, no podemos decir que ha sido probado por un número suficiente de aplicaciones del mundo real, como Microsoft.NET. Así que por favor, prueba a cabo sus solicitudes y presentará problema que encuentre al equipo de Mono.

Con base en mi experiencia, problemas menores son fijos dentro de sólo unos pocos días, mientras que para las cuestiones principales que se necesita un tiempo más largo. Pero con el código fuente Mono disponible, se puede fijar por su cuenta o averiguar buenas soluciones la mayoría de las veces.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top