property - void c#
Servidor web C#(mono) Linux alojado con variables estáticas consistentes a través de subprocesos (1)
¿Alguien sabe de una configuración de alojamiento de servidor web C # (mono) Linux que permite variables estáticas consistentes a través de subprocesos (es decir, no el modelo CGI de una instancia por subproceso)?
Detalles
Tengo un código c # (mono) que necesitamos para alojar en Linux como parte de una simple aplicación web. No necesitamos ninguna característica asp tradicional o incluso asp.net mvc, realmente solo necesitamos la capacidad de responder a direcciones URL específicas con contenido dinámico basado en variables estáticas compartidas.
Variables estáticas: el único requisito especial que tenemos es que necesitamos variables estáticas para retener su valor en todas las solicitudes entrantes (de la misma forma que lo hacen en Windows con una aplicación mvc ASP.net). Las formas comunes de hospedar una aplicación web mono c # como Apache mod_mono parecen usar un modelo de ''instancia de aplicación c # por hilo'' donde habría múltiples instancias independientes de nuestra aplicación c # cada una con sus propias variables estáticas. Ese es el problema que debemos evitar. Necesito una forma de alojamiento de la aplicación de CA que proporciona una aplicación común con un conjunto compartido de variables estáticas que verán todas las solicitudes entrantes. Está bien si cuando la aplicación se recicla, las variables estáticas se reinician (como en el IIS / MVC normal), siempre que los reciclados sean poco frecuentes.
El trasfondo es que esta aplicación web necesita contener una gran cantidad de datos en la RAM en una variable estática y responde rápidamente preguntas sobre esa información. Tener una copia de la aplicación abierta para cada hilo limitaría demasiado los recursos RAM y volver a cargar los datos en la memoria con frecuencia haría que la aplicación fuera demasiado lenta (los reciclados ocasionales como IIS / Asp.net MVC están bien). El sistema funciona increíblemente bien en Windows / IIS7 (más de 50,000 solicitudes dinámicas por segundo) y no queremos cambiar esta arquitectura, por lo que la respuesta que estoy buscando se relaciona con el alojamiento sin cambiar el diseño de la aplicación.
mod_mono no genera un nuevo proceso mono para cada nueva solicitud web. Tampoco lo es si usa el servidor fastcgi junto con apache o nginx.
EDITAR: las variables estáticas se comparten dentro del mismo dominio de aplicación. Esto es válido para Microsoft .NET IIS y para mono (no importa si está utilizando mod_mono, xsp o mono-fastcgi-server). Aun así apache genera múltiples subprocesos de trabajo y una única solicitud se maneja con un único subproceso de trabajo, solo hay un único proceso en ejecución en un momento dado (excepto si ha configurado varias aplicaciones asp.net, entonces hay una por aplicación) .
Mono también intenta lograr una compatibilidad del 100% para ASP.NET, por lo que no hay un comportamiento diferente según el diseño.
El comportamiento diferente de su programa en Linux probablemente no esté relacionado con la forma en que mod_mono maneja las solicitudes, sino más bien con un error en mono mismo o en su código (es decir, suponiendo que la plataforma no es cierta en Linux). Realmente debe depurar usando MonoDevelop / xsp e intentar identificar el problema más claramente, o pegar aquí un código de muestra.