asp.net,stateserver,NLB、館内インフォメーションにて、失われた
-
11-07-2019 - |
質問
第1に掲stackoverflowしていることを望んでいてフィードバック:)
っていうの負荷バランス当社のウェブサイトです。しました2つのクラスター NLB windows server2003IIS6.
試験をしながら、セットアップ、その時には、セッションは失われます。日半以降、この結果:
- 有しています。config両方とも同じ暗号化/復号化鍵があります。
- あり、id iis metabase.xml は同じでも機です。実際、全体のファイルの同じものを除き、"AdminACL".
- 両方のウェブアプリ設定"StateServer"の両方を指差で実行するのと全く同じです。
この点からの検索にはgoogleを以下の情報をすることも可能です。
だからこそ知る、ありませんが特定のパターンの原因となることになる。それだけで起こります。
したがって、何らかの問題などの見が送信された要求のaspセッションidをcookie、サーバーがサーバーにな地図では、ユーザのセッション。
その要求数xクライアントから送られてきたのは、クッキーのセッションでマップされ、すべての手続きが順調に運びました。ご請求の数x+1のクライアントから送られてきた、クッキーがセッションは見つかりませんでした。
両方の要求にした同機は、NLB.
このスニペットのaspた。axd:
1回の請求ごと
要求詳細 セッションId:j2ffvy45updpc52uhw1mbg55要求タイプ:得 時間の要請:11/26/2008 2:58:06PMステータスコード:200 リクエストのエンコーディング:Unicode(UTF-8)に対応エンコード:Unicode(UTF-8)
申クッキーの収集
名前と値のサイズ
ASP.NET_SessionId j2ffvy45updpc52uhw1mbg55 42 援助22 9
対応クッキーの収集
名前と値のサイズ
ヘッダーの収集
名称値
クッキー ASP.NET_SessionId=j2ffvy45updpc52uhw1mbg55;援助=22
第2回の請求ごと
要求詳細
セッションId:要求タイプ:ポスト
時間の要請:11/26/2008 2:58:08PMステータスコード:
リクエストのエンコーディング:Unicode(UTF-8)に対応エンコード:
申クッキーの収集
名前と値のサイズ
対応クッキーの収集
名前と値のサイズ
ヘッダーの収集 名称値 クッキー ASP.NET_SessionId=j2ffvy45updpc52uhw1mbg55;援助=22
ご覧のとおり、第2の要求をクッキーのクライアントから送られてきたが、aspのような追加のクッキーで"申クッキーのドレスを身にまとっていた。それでいいんじゃないのはなぜなのです。
ではなぜこんなにクッキーがマップされョンをクリックします。が問題なのでしょうか。の問題な?
お気軽にお問明確化.
リオデジャネイロます。
JF
解決
ようやく問題の答えが見つかりました。その起源はアプリケーションコード内にあります(プログラマのサードパーティツールの「バグ」の99%など)。とにかく誰かが同様のシナリオにある場合に備えて投稿することにしました。
このコードはWebServiceRequesterクラスの一部でした。 Webサービスリクエスタークラスは、セッションが作成されたときにインスタンス化され、セッションで保存されます。作成中に、メンバー「m_webServiceURL」を初期化し、このメンバーはその後セッションで保存されます。このメンバーの初期化の値は、ローカルマシンの設定に依存していました。
重要な部分は次のとおりです。 WebServiceRequesterクラスにはWebServiceオブジェクトが含まれます。 WebServiceオブジェクトはセッションで保存できません。aspではシリアル化できません。プロパティには[NonSerialized]属性がありました。そのため、ページのライフサイクル中に最初にオブジェクトの「WebService」プロパティにアクセスするたびに、新しいものを作成し、セッションに保存されたURL「m_webServiceURL」をotに割り当てる必要がありました。 おそらく、異なるマシン上にある新しいWebサービスオブジェクトが表示されます。これは、各マシンの異なる設定を意味します。
だから、ここで何が起こったのか: ボックス29は、localhostのWebサービスにアクセスするように設定されました
ボックス30は、Webサービスに192.168.253.29としてアクセスするように設定されました。
技術的には、両方とも同じマシンに設定されます。しかし、ここにシナリオがあります:
ボックス29のログイン。セッションでm_webServiceURLがlocalhostに設定されます。
[ここでボックス29のリクエスト]
NLBバランシングにより、ボックス30が表示されます。 ボックス30はそのセッションをロードし、localhostをWebサービスアドレスとして新しいwebservice obectを作成します。 ボックス30が間違ったWebサービスにリクエストを送信し、Session Expired例外が発生しました。
デバッグ中の問題の1つは、ローカルコミュニケーションがネットワークモニターで記録されなかったことです。
トレースで私を導いたのは、ボックス29ログトレースに例外が記録されることはなかったということでした。
皆さんの提案に感謝します。本当に感謝しました。
良い一日を。 JF
他のヒント
厳密にはあなたの質問に対する答えではありませんが、SQLサーバーベースのセッションストアを使用して試しましたか? (asp.netで提供される一時スクリプトではなく、永続的なスクリプトをMSDNで検索してください)
「悪いこと」と聞いたことがあります実行可能なセッションサービスについて、そのため使用していません。ただし、SQL Serverベースのソリューションを使用したWebファームで問題は発生していません。
それは厳密にあなたの問題に対する答えではありませんが、(a)修正するか、(b)大幅に絞り込む必要があります。
まあ、Visual Studioを使用している場合は、少なくともMSDE(Visual Studioに付属しているSQL Serverの縮小版)でテストできます...
これは、状態サーバーの問題を除外するのに役立つ可能性があります...
データベースアプローチの使用には、独自の問題があります。お好みのアプローチを使用できるはずです。
おそらくこのセッションのトラブルシューティング記事助けになりますか?
または" ASP.NETのセッション関連問題のトラブルシューティング"
または" 期限切れのASP.NETセッション状態とオプションのトラブルシューティング"
んなりと色再繰り返し処理を実行し、MS SQLサーバーです。トSQLサーバーを表現するcompleteley無料などの商業利用のみでこれら3点をだますこのステージ:
- 最大4GBサイズのデータベース
- 最大1CPUコアを使用
- 最大1GB RAM使用
考慮すべきいくつかのポイント:
- ウェブサイトの負荷はどれくらいですか? State Serverは、多数の同時ヒットに直面するとクラッシュする傾向があります。本当に少数のユーザー(10代、主にバックエンドシステム)がいるシナリオでのみ使用しています。毎日数千人のユーザーにサービスを提供するサイトの運用環境で使用しようとすると、クラッシュしてセッションデータが失われます。
- 私たちが管理する本番環境の1つでは、MSSQL 2005 Expressを使用してセッションを管理しています。このサイトには1日あたり10K以上のユーザーと1日20万以上のページがあります。これは、セッションが必須であり、アプリケーションに密結合している場合に推奨されるアプローチです。
状態SQLとしてMSSQL Expressを使用する場合は、SQL Serverエージェントが付属していないことを忘れないでください。つまり、バックグラウンドで実行されるタスクスケジューラがなく、期限切れのセッションを削除します。スケジューラを見つけて、期限切れのクリーンなセッションストアドプロシージャを定期的に実行することをお勧めします。
幸運
SQLをいじるのではなく、テストをIISノードの1つに直接送信して、同じ問題が引き続き発生するかどうかを確認します。少数のテストを行うだけでStateServerが問題にならないと確信しています。
コードを使用してasp.net_sessionidのドメイン名を" .yourdomain.com"に設定してみてください。 既定では、ASP.net_SessionID Cookieドメイン名は完全なアプリケーションパスに設定されます。したがって、これがCookieが移動しない理由の1つである可能性があります。
E.g。 Request.Cookies [" ASP.NET_SessionId"]。Domain =&quot..yourdomain.com"。 最初の「。」を覚えておいてください。ドメイン名で重要です。
AcquireRequestStateイベントのHttpModuleでこれを実行できます。