2010-12-30 13 views
6

Si tenemos una clase singleton como LoadBalancer y necesitamos una instancia por cada aplicación ASP.NET, ¿dónde la almacenaremos?Práctica recomendada para almacenar una instancia de singleton en la aplicación ASP.NET

Actualmente uso Application.Add("LoadBalancer", LoadBalancer.Instance) en Application_Start() en Global.asax.

También Application objeto es creado por ASP.NET y hay varias instancias por aplicación en función de la carga de trabajo. También puedo declarar una instancia static de mi LoadBalancer en Global.asax.

¿Cuál es preferido? ¿Alguna mejor idea?

+0

estoy con Cybernate aquí, esto suena como un diseño de graves deficiencias. ¿Qué está haciendo exactamente el objeto LoadBalancer? Porque, francamente, si intenta equilibrar el tráfico de la carga en su sitio, entonces ha hecho esto de una manera completamente incorrecta. – NotMe

+0

Si intenta mantener el "único objeto que los gobierna a todos" en varios servidores web de una granja de servidores, probablemente tenga que almacenarlo en una base de datos y recuperarlo cada vez que lo necesite, utilizando los recursos apropiados. reglas de concurrencia, por supuesto. – Greg

+0

'LoadBalancer' aquí no es el equilibrador de carga conocido en granjas de servidores. Es un objeto mío – Xaqron

Respuesta

3

Si es un Singleton, ¿por qué desea almacenar en los elementos de la Aplicación? ¿No se supone que devolverá la misma instancia cuando use LoadBalancer.Instance desde cualquier lugar de la aplicación?

En caso de que su sitio esté utilizando el equilibrio de carga o una granja de servidores web, cada servidor tendrá su instancia de objeto Aplicación y LoadBalancer.Instance.

+0

@Aliostad: ¿Podrías decirme por favor qué es lo que me extraño o entiendo mal? – Chandu

+0

Lo sentimos mal ... – Aliostad

2

No tiene que almacenar un objeto singleton en el objeto Aplicación. La implementación estándar del objeto Singleton es válida. http://msdn.microsoft.com/en-us/library/ff650316.aspx

Pero si usa Web Farm es una historia diferente, debe tener el objeto Singleton alojado por separado en un servicio diferente y todos los servidores deben solicitar el objeto desde ese servicio utilizando Remoting o WCF.

Cuestiones relacionadas