- - PR -
DNSラウンドロビン時のmachineKey要素の設定について
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-10-16 21:10
ASP.NET2.0で開発したアプリを2台のWebサーバー(Win2003 Ent)に配置し、それらをDNSラウンドロビン方式で稼働させようとしておりまして、セッションはSQLServer上に持たしてあります。
以下のサイトを参考にして、両Webサーバーのmachine.configに以下のmachineKey要素を追加したのですが、どうもWebサーバー1号機から2号機にラウンドロビンされた時に、うまくセッションを取得できていないという不可思議な状況に陥っております。 【参考にしたサイト】 http://www.microsoft.com/japan/msdn/enterprise/pag/securityguidance/paght000007.aspx 【両Webサーバーのmachine.configに追加したmachineKey要素】 <machineKey validationKey="719F87E49583DB03719553DA46C3CFC0564B759EE72DC5B05CD53D7F1E5B4D41F88A2D2FF65EC3B0571F694F6669E5A35795B57A4C769C0D63E1FDAB466B603B" decryptionKey="20F0614ABC2201CAB11A88FB5B58CE6A976E121039BD84C5" validation="SHA1"/> machineKey要素の設定がおかしいのかもしれませんが、もし何か解決方法をご存じであれば、ご教授頂けませんでしょうか? 宜しくお願いいたします。 |
|
投稿日時: 2007-10-17 11:42
追加情報ですが、machineKey要素を各Web.configに追加してもダメでした。
|
|
投稿日時: 2007-10-17 11:52
web.configを使って、machineKeyをmachine.configで設定した値とは異なる値で上書してませんか?
各階層のweb.configを確認してmachineKeyの記述があったらその記述を削除してみる or とりあえずアプリケーションレベルのweb.configで共通のmachineKeyを設定して試してみる といった対応はいかがでしょうか。 --追記-- このレス書いてる間に、上のレスが投稿されていました。 web.configに書いてもダメだったんですね・・・。 [ メッセージ編集済み 編集者: かめたろ 編集日時 2007-10-17 11:55 ] |
|
投稿日時: 2007-10-17 12:13
sessionStateのデータソースをうっかり別々のにしちゃってた、なんてことはないですよねぇ
|
|
投稿日時: 2007-10-18 00:25
両WebサーバーのSessionStateはどちらも同じDBサーバーが指定されていることを確認しました。
そもそもDNSランドロビンは対応していないということなのでしょうか? |
|
投稿日時: 2007-10-18 10:41
DNSを使用したラウンドロビンは試したことがないのでなんとも言えないです・・・。
他に思いつくのは、それぞれのサーバのWebアプリケーションが別々のcookieを読んじゃっていないか?ってことぐらいです。sessionIdってcookieに格納されますよね、確か。 |
|
投稿日時: 2007-10-19 09:57
Web.config の SessionState のSQL Serverの接続先設定と machineKey の
設定が同じで Session変数が共有できないとは考えられないのですが・・。 『Webサーバー1号機から2号機にラウンドロビンされた時に、うまくセッションを取得できていないという不可思議な状況に陥っております。 』 これについてどのような方法でテストしましたか? 1号機をシャットダウンして自動的に2号機に切り替えて確認したのか、 単純に 1号機のIPアドレスと2号機のIPアドレスを URL欄に直接入れてテストしたとか・・。 当然ですが 1号機と2号機のIPアドレス直接指定であれば 同じSession変数は取得できません。 同じURLでアクセスできないと同じSession変数は使えません。 理由はわかりますよね? |
|
投稿日時: 2007-10-19 12:38
返信ありがとうございます。
テストのやり方についてですが、既にラウンドロビンが構築されている環境で、ドメイン名でアクセスしております。尚、各Webサーバーに正常にラウンドロビンされていることは両WebサーバーのIISログで確認しました。 次にセッション部分の判定ですが、両Webサーバーに配置されているアプリの各画面はLoadイベントハンドラにてIsNewSessionをif文判定するロジックが入っておりまして、これがtrueであればエラー画面に遷移させるという使用になっております。 これが同じWebサーバーにリクエストがとんでいる間はIsNewSessionがfalseになっているのですが、どうもラウンドロビンされて別のWebサーバーに飛ぶとtrueになってしまっているようです。 |