2009-08-11 11 views
1

サーバーファーム内でasp.netアプリケーションを実行しています。そこでIn-procセッションが終了しました。州のサーバーはありません。 SQL Serverデータベースがあります(状態サーバーには使用できません)。同じWebサーバ機能を強制することはありませんので、どのWebサーバが次のページに提供されるかは保証されません。inprpcまたは状態サーバーを使用せずに、Webファーム内のページ更新の間にASP.NET内のデータブロックを保存する必要があります

ページ間にデータブロック(大きなオブジェクトの状態)を保存する必要があります。私はビューステートを使用したくありません。なぜなら、データは大きく、ワイヤを横切ることを望まないからです。 データベースを使用してデータを保存し、ビューステート内のワイヤを介してレコードIDを使用し、次のページのデータを取得できます。

もっと良い解決策はありますか?

答えて

1

さて、ほとんどのオプションは既に除外されていると思います。

  1. 書き込み可能なファイル共有を使用してデータを格納します。他のサービスをインストールすることはできません。
  2. 個々のWebサーバーが互いに通信できるようにします。たとえば、マシンのIPまたは名前を生成された一意の識別子の一部にします。そうすれば、ポストバック時に別のサーバーに到達すると、そのサーバーはそのデータ用に元のサーバーを呼び出すことができます。 1つのサーバーがダウンした場合(またはASP.NETプロセスがリサイクルされた場合)、すべてのデータが失われます。*この件に関係なく、頻繁に起こるはずはありません。

SQL Serverのバージョンと同様に、何らかの理由でデータをクリーンアップすることを忘れないでください。オプション1はSQL Serverと非常によく似ていますが、SQL Serverの場合、ファイルシェアのケースでは、単に中央集中的なクリーンアップジョブになる可能性があります。どのサーバーが中心ですか?

*)もちろん、ASP.NETから2次プロセスを起動することもできます。ここでの問題は、そのプロセスに問題がある場合はどうなりますか? が扱いにくい場合を除き、システム管理者はデフォルトで管理できません。

+0

あなたは彼の質問に答えていますが、これは皆にとって恐ろしいハックの仕事であることは明らかです。実際、あなたが提案した両方の項目は、より一般的なアプローチへの単純な奇妙な選択肢です。 (共通のファイル共有=>共通のデータストア=>データベースストア) –

+0

確かに、その人はオプションを望んでおり、非泥棒のものは不可能です。しかし、私は共通のファイル共有=>共通のデータストア=>データベースストアに完全に同意しません。リレーショナルデータベースは匿名のBLOBストアではありません。それはファイル共有と同じくらい駄目です。あなたは、あなたが保管しようとしているデータを好ましくはモデル化するべきですが、その質問から、その提案は少し遅れています。 – Ruben

+0

はい。標準的な手順が利用できない場合、ハッキングに頼るでしょう。これは、ハックが機能しないことを意味するものではありません。十分な予防措置と防御的なプログラミングが必要な人は、十分に良いはずです。 –

4

私は データを保存し、ビューステートに ワイヤー間でレコードIDを使用して、次のページの データを取得するためにデータベースを使用することができます。

あなたは他のすべてのオプションを削除しました。

0

私は正しいとは分かりませんが、asp.netセッションを保存するためにデータベースを使用できないのですか?

<sessionState 
     mode="SQLServer" 
     sqlConnectionString="somedb" 
     cookieless="AutoDetect" 
     timeout="20" 
    /> 

またmemcached(http://www.danga.com/memcached/のような分散キャッシング・ソリューションのいくつかの並べ替えを使用することができ、それはポストバックの間でデータを永続化できます。

関連する問題