- PR -

DNSラウンドロビン時のmachineKey要素の設定について

投稿者投稿内容
緑茶
常連さん
会議室デビュー日: 2003/08/17
投稿数: 32
お住まい・勤務地: 東京都
投稿日時: 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要素の設定がおかしいのかもしれませんが、もし何か解決方法をご存じであれば、ご教授頂けませんでしょうか?

宜しくお願いいたします。
緑茶
常連さん
会議室デビュー日: 2003/08/17
投稿数: 32
お住まい・勤務地: 東京都
投稿日時: 2007-10-17 11:42
追加情報ですが、machineKey要素を各Web.configに追加してもダメでした。
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2007-10-17 11:52
web.configを使って、machineKeyをmachine.configで設定した値とは異なる値で上書してませんか?

各階層のweb.configを確認してmachineKeyの記述があったらその記述を削除してみる
or
とりあえずアプリケーションレベルのweb.configで共通のmachineKeyを設定して試してみる

といった対応はいかがでしょうか。

--追記--
このレス書いてる間に、上のレスが投稿されていました。
web.configに書いてもダメだったんですね・・・。

[ メッセージ編集済み 編集者: かめたろ 編集日時 2007-10-17 11:55 ]
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2007-10-17 12:13
sessionStateのデータソースをうっかり別々のにしちゃってた、なんてことはないですよねぇ
緑茶
常連さん
会議室デビュー日: 2003/08/17
投稿数: 32
お住まい・勤務地: 東京都
投稿日時: 2007-10-18 00:25
両WebサーバーのSessionStateはどちらも同じDBサーバーが指定されていることを確認しました。

そもそもDNSランドロビンは対応していないということなのでしょうか?
かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2007-10-18 10:41
DNSを使用したラウンドロビンは試したことがないのでなんとも言えないです・・・。
他に思いつくのは、それぞれのサーバのWebアプリケーションが別々のcookieを読んじゃっていないか?ってことぐらいです。sessionIdってcookieに格納されますよね、確か。
k_kazu
常連さん
会議室デビュー日: 2006/02/11
投稿数: 25
投稿日時: 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変数は使えません。
理由はわかりますよね?

緑茶
常連さん
会議室デビュー日: 2003/08/17
投稿数: 32
お住まい・勤務地: 東京都
投稿日時: 2007-10-19 12:38
返信ありがとうございます。

テストのやり方についてですが、既にラウンドロビンが構築されている環境で、ドメイン名でアクセスしております。尚、各Webサーバーに正常にラウンドロビンされていることは両WebサーバーのIISログで確認しました。
次にセッション部分の判定ですが、両Webサーバーに配置されているアプリの各画面はLoadイベントハンドラにてIsNewSessionをif文判定するロジックが入っておりまして、これがtrueであればエラー画面に遷移させるという使用になっております。

これが同じWebサーバーにリクエストがとんでいる間はIsNewSessionがfalseになっているのですが、どうもラウンドロビンされて別のWebサーバーに飛ぶとtrueになってしまっているようです。

スキルアップ/キャリアアップ(JOB@IT)