2012-03-22 20 views
0

私は高価なサーバーサイドリソース(スレッドセーフです)を持っています。私は何を提供したいことは次のとおりです。.NETベースのRESTサービスの作成 - スレッドプールとシングルトンの使用

  • 他のアプリがデータを提出することができ、それが非機能的な観点から

を処理しますリモートRESTインターフェース、:

  • 私は高価にしたいですサーバー側のオブジェクトをシングルトンにする、つまり単一のインスタンスがすべての要求を処理するようにする
  • 私は、歓待される要求の数を制限したい - より多くの要求がある場合は許可されたプール、残りはwai処理待ちのキューに入れます。

上記の目的を達成するためにカスタムコードを書くことはできますが、私はそうしたくありません。私はWCFを使用して以来、しばらくしてきました。

よろしくお願いいたします。

FYI:ライセンスの制限により、私は本当に複数のオブジェクトインスタンスを作成できません。

答えて

1

高価なサーバー側オブジェクトのライフタイムを制御するためにオブジェクトプールパターンを使用しないのはなぜですか?

シングルトンと要求数に課される制限は、危険にさらされます。遅かれ早かれ、あなたはクライアントの数が増え、あなたのサービスは非効率になるので、あなたには復讐があります。また、シングルトンは並行環境では危険であり、シングルトンが独自の状態を持つ場合、2つ以上の同時要求がそれを吹き飛ばします。

一方、プールの管理、高価なオブジェクトの作成回数、およびその時期を完全に制御できます。もちろん、カスタムコードが必要です。

すぐに何かが必要な場合は、ServiceBehavior属性でサービスを制御できます。 InstanceContextModeConcurrencyModeの属性はおそらく動作します。シングルトンモードを設定して着信要求をキューに入れることができます(InstanceContextMode.SingleConcurrencyMode.Single)。

+0

ありがとうございますが、次の制限があります。a)ライセンス+技術的な制限のため、実際には1つ以上のインスタンスを作成できません。 b)シングルトンオブジェクトには状態がありません。 – effkay

+0

それから、あなたは 'ServiceBehavior'勧告に従うことができます。 –

+0

質問:ConcurrencyMode.Singleは1つのリクエストをいつでも楽しませます。プールサイズを指定する方法はありますか?どのような場合でも、最大10件の通話が楽しまなければなりませんか?コードレベで可能ですか、IISを設定する必要がありますか? – effkay

関連する問題