2009-06-13 22 views
3

アプリケーションが実行されているドメインに基づいて、ASP.netのSessionStateに使用されるsqlConnectionStringを変更できるかどうかは疑問でしたか?ASP.Netセッション状態

シナリオ。 1つのアプリケーションから実行されている20のサイトが、どのドメイン(サイト)を参照しているかに応じて、それぞれ異なるデータベースに対話しています。

www.domain1.comを閲覧するとき、アプリケーションはデータベース 'db1'と会話します。他方、サイトwww.domain2.comはデータベース 'db2'などと会話し、関連コンテンツを選択し、1つのマスターデータベースを使用してサイトのすべての接続を処理するのではなく、各データベースに負荷を分散します。

この設定では、SessionStateにSqlServerモードを使用しているため、すべてのサイトセッションのすべてのユーザーが1つのaspstateデータベースに格納されています。すべてのサイトのすべてのセッション要求を処理するための緊張が高まっており、このデータベースへの接続がボトルネックになっているタイムアウトエラーが発生し始めています。

サイトをそれぞれのアプリケーションから分離し、同じコードで異なるアプリケーションを設定できますが、各アプリケーション内では各Web.Configに異なるセッションデータベースを設定して負荷を軽減します。この作業はかなり時間がかかり、長期的にはより多くの管理につながります。セッションオブジェクトが作成される前に、ドメイン内でSessionStateに使用されたsqlConnectionStringをコード内で変更することが可能かどうかを知りたいですか? System.Web.HttpApplicationから継承し、Application_AcquireRequestStateイベントを使用してHttpSessionStateオブジェクトの必要なセットアップを作成できますか?

うまくいけば、これは意味があり、誰かが指針を提供して、これがパイプの夢ではないことを私に証明することができたらうれしいです!

乾杯、 スティーブ

答えて

2

私は大きな問題を抱えていると思いますが、同じサーバー上の別々のデータベースに物事を入れても、ボトルネックがSQLサーバーの場合は何の助けにもなりません。SQLがヘッドルームから外れているか、ネットワークの帯域幅が不足しています。私は何かをする前にそれを試してみようと思います。

0

カスタムセッション状態プロバイダを実装することができます。詳細については、MSDNを参照してください。私はそれをやったことがないが、少し運とあなたはSqlServerのセッション状態モジュールをラップすることができ、私は大好きだ」の利点があるすべての

0
  • まず、私が表示されていないドメインに基づいて、それをリダイレクトセッションオブジェクトが作成される前にドメインに基づいてSessionStateに使用されたsqlConnectionStringをコード内で変更することが可能かどうかを知るために "これをweb.configで設定することと比較します。
  • 第2に、App_Startでその接続文字列の設定を変更する必要があると思います。そのため、すべてのリクエストで変更された設定が使用されます.Application_AcquireRequestStateはおそらく遅すぎます。
+0

20のドメインすべてに1つのweb.configが使用されていると思います... – chris166

0

なぜサイトを正常なウェブアプリケーションに分割し、ホストヘッダーを使用してウェブサイトを区別してみませんか。そうすれば、各Webアプリケーションに別々のweb.configファイルがあるため、Webアプリケーションで使用するセッションデータベースを簡単に設定できます。

0

データベース接続がプロジェクトのメインのWeb.Configで処理される数十の開発サイトがあります。

イントラネットの各URLに対応する個別の設定セクションがあります(例:http://development11http://development12)。同様の命名規則(DEVDB1 \ SQL1、DEVDB1 \ SQL2)を持つSQLインスタンスがあります。

イントラネットIISサーバー上で構成されたURLに基​​づいて、アプリケーションは適切な設定を取得します。テストのために、特定のサイトに利用されているユーザー、データベースサーバー、または個々のデータベースを簡単に変更することができます。

2

あなたの問題は、データベースへの接続がボトルネックにならず、すべてのセッションのデータを使ってデータベースへのネットワーク接続を圧倒しているという問題です。

デフォルトでは、SQL Serverの状態プロバイダは、データをシリアル化してデータベースに送信するだけです。これは非常に効率が悪く、高速なネットワークで転送するのに時間がかかります。

DOTSSのようなカスタムプロバイダを使用してセッションの内容を圧縮し、データベースに送信することでこの問題を解決しました。我々が見る圧縮率は80%〜90%であり、圧縮時間は10ms未満です。

+0

非常に興味深いJeff、DOTSSに感謝します。ありがとう – Stibstibstib

関連する問題