地方にある拠点のサーバーの入れ替え作業ということで、休日出勤して対応しておりました。
ある程度の既存システムは平日に前もって入れ替えており、IPアドレスが変わらないと確認できない3システムのみ当日リモートにて確認するという段取りでした。
当日、確認対象の3システムは特に問題なく確認を終えたのですが、現地にいる同僚から、平日に確認したシステムを確認していたところ、1つのシステムで問題が発生してしまいました。
WebサーバーにIIS6.0(IIS5.0互換モード)を使用しているのですが、クライアントPCのブラウザからあるマスタテーブルに存在するコードを入力したにもかかわらず、未存在のエラーメッセージを表示され、しかも本来ならエラーメッセージ表示して数秒後には自動で入力画面に戻るはずが、「内部サーバーエラー500」が表示されてしまうのです。
しかし、Webサーバー上のブラウザから同じことをしても、正常に動作します。また、クライアントPCでも10台ある中で数台について正常に動作するのです。
こういう原因不明な場合には、IISリセットするのが一般的な対処方法なので、IISResetを実行したのですが、結果は何も変わりませんでした。
プログラム側で調査することになり、問題となっているSQLをログ出力してみると、本来、抽出条件に入るべきセッション変数の値が空になっているのです。確かに、これでは未存在エラーになるのは当然です。
しかし、何故、セッション変数の値が消えてしまうのか?
プログラム側でいろいろ調べてみたのですが原因が分からず、なんだかんだと数時間経ってしまいました。
報告がてら同僚に相談すべく電話してみたところ、「仮装ディレクトリを再作成してみたら」というアドバイスを頂きました。
早速、アドバイスに従い、仮装ディレクトリを再作成してみたところ、今まで悩んでいた現象がなくなり、正常に動作するようになったのです。
念のため、全てのクライアントPCで確認してもらいましたが、いずれも現象は発生しませんでした。
仮装ディレクトリの再作成で解決したところをみると、原因としてはマッピング情報が壊れてしまっていたということなんでしょうね。
ネットで検索しても、「仮装ディレクトリの再作成」によって解決という事例が見当たらなかったです。もしかしたら常識すぎて記載するほどでもないってオチだったりして・・・。
ってことで、内部サーバーエラー500が発生して、IISResetしても解決しない場合、仮装ディレクトリを再作成することで解決することもあるんだってことを、今回のブログネタにしてみました。