2010-12-30 15 views
6

LoadBalancerのようなシングルトンクラスがあり、ASP.NETアプリケーションごとに1つのインスタンスが必要な場合は、どこに格納するのですか?ASP.NETアプリケーションでシングルトンインスタンスを保存するためのベストプラクティス

現在、私はApplication.Add("LoadBalancer", LoadBalancer.Instance)Application_Start()Global.asaxに使用しています。

また、ApplicationオブジェクトはASP.NETによって作成され、ワー​​クロードに基づいてアプリケーションごとに複数のインスタンスが存在します。またstaticのインスタンスをLoadBalancerとしてGlobal.asaxに宣言できます。

どちらが優先されますか?どんな良いアイデア?

+0

、これは深刻な欠陥のあるデザインのように聞こえます。まさに、LoadBalancerオブジェクトは何をしていますか?あなたのサイトでトラフィックの負荷を分散しようとしている場合は、まったく正直なので、これについてはまったく間違った方法で行っています。 – NotMe

+0

ファーム内の複数のWebサーバー間で「1つのオブジェクトをすべて管理する」オブジェクトを維持しようとする場合は、必要に応じて適切なデータベースを使用してデータベースに格納し、もちろん並行性のルール。 – Greg

+0

ここの 'LoadBalancer'はサーバーファーム内の既知のロードバランサではありません。それは私の目的です。 – Xaqron

答えて

3

シングルトンの場合、なぜアプリケーションアイテムに保存しますか?アプリケーションのどこからでもLoadBalancer.Instanceを使用すると、同じインスタンスを返すはずですか?

サイトが負荷分散を使用している場合、またはWebファーム内にある場合、各サーバーのインスタンスはApplicationオブジェクトとLoadBalancer.Instanceになります。

+0

@Aliostad:私は何が不足しているのか間違って理解しているか教えていただけますか? – Chandu

+0

ご迷惑をおかけします.. – Aliostad

2

アプリケーションオブジェクトにシングルトンオブジェクトを格納する必要はありません。シングルトンオブジェクトの標準実装は良好に保持されます。 http://msdn.microsoft.com/en-us/library/ff650316.aspx

Webファームを使用している場合は、別のサービスで別々にホストされているシングルトンオブジェクトを持っていて、すべてのサーバーがRemotingまたはWCFを使用してそのサービスからオブジェクトを要求する必要があります。

関連する問題