2010-12-30 12 views
6

Jeśli mamy klasę singleton taką jak LoadBalancer i potrzebujemy jednej instancji na aplikację ASP.NET, to gdzie ją przechowywać?Najlepsza praktyka do przechowywania wystąpienia singleton w aplikacji ASP.NET

Obecnie używam Application.Add("LoadBalancer", LoadBalancer.Instance) w Application_Start() w Global.asax.

Obiekt Application jest również tworzony przezi istnieje wiele instancji na aplikację w zależności od obciążenia. Również mogę zadeklarować instancję static mojego LoadBalancer w Global.asax.

Który jest preferowany? Masz lepszy pomysł?

+0

jestem z Cybernate tutaj, to brzmi jak poważnie wadliwej konstrukcji. Czym dokładnie jest obiekt LoadBalancer? Szczerze mówiąc, jeśli próbuje się załadować ruch saldo na swojej stronie, to podchodzisz do tego w zupełnie niewłaściwy sposób. – NotMe

+0

Jeśli próbujesz zachować "jeden obiekt, aby rządził nimi wszystkimi" na wielu serwerach w farmie, prawdopodobnie będziesz musiał przechowywać go w bazie danych i pobierać za każdym razem, gdy go potrzebujesz, wykorzystując odpowiednie zasady współbieżności oczywiście. – Greg

+0

"LoadBalancer" tutaj nie jest znanym load balancer w farmach serwerów. To mój przedmiot. – Xaqron

Odpowiedz

3

Jeśli jest to Singleton, dlaczego chcesz przechowywać w elementach aplikacji? Czy nie powinien zwracać tej samej instancji podczas korzystania z LoadBalancer.Instance z dowolnego miejsca w aplikacji?

Jeśli witryna korzysta z równoważenia obciążenia lub jest w farmie internetowej, każdy serwer miałby swoją instancję obiektu aplikacji i LoadBalancer.Instance.

+0

@Aliostad: Czy możesz dać mi znać, czego mi brakuje lub rozumiem źle? – Chandu

+0

Przepraszamy błędne przeczytanie .. – Aliostad

2

Nie musisz przechowywać pojedynczego obiektu w obiekcie aplikacji. Standardowa implementacja obiektu Singleton jest dobra. http://msdn.microsoft.com/en-us/library/ff650316.aspx

Ale jeśli używasz Farmy Sieciowej, to inna sprawa, powinieneś mieć obiekt Singleton hostowany osobno w innej usłudze, a wszystkie serwery powinny żądać obiektu z tej usługi za pomocą Remotingu lub WCF.

Powiązane problemy