記事内に広告が含まれています

【ワレコの備忘録】ASP.NET IISサーバーでファイル書き込みエラー【解決】

この記事は約8分で読めます。
スポンサーリンク

新年が開けたので、ワテのヘンテコブログの読者の皆さんに

【ワレコの謹賀新年】2016年・平成28年・申年(さるどし)新年の御挨拶
2016年 明けましておめでとうございます。 今年も各種のヘンテコなプログラムを作成して人類に貢献したいと思っています。 昨年は、以下のヘンテコなプログラムを作成しました。 Wareko Map 使いやすい地図 われこマップ Wareko ...

を書いたところ、

ある読者の方から、

われこさん
新年早々なのですがサーバーが壊れている?ようです
http://www.wareko.net/WebPasswordGen/PasswordGen.aspx

こんなコメントを頂いた。

あれれ?おかしいぞ。

新年早々あかんがな。

当記事では、2016年の新年に発覚したASP.NETウェブサイトの問題の調査と解決までの過程をまとめてみた。

では、本題に入ろう。

スポンサーリンク
スポンサーリンク

ワテ自作パスワード自動生成サービスサイトの紹介

上記のサイトは、正常に動くと下図のような画面が出るはずなのだ(下図)。

何に使うかと言うと、パスワードを自動で生成するオンラインサービスだ。

用途としては、いろんな状況が考えられる。

パスワード自動生成サービスのお勧めの用途

  • ネットの無料サービスに登録するときにパスワード32文字以上で入力して下さいと言われる。そんな長いパスワード思いつかん。
  • パスワードには英数字だけでなく記号も含めて下さいと言われる。
  • パスワードの文字に数字の0と英字のOを使ったのでゼロかオーか分からなくなってしまった。
  • メンバー全員のパスワードを更新したいので自動で沢山生成したい。
  • 銀行のネットサービスなどで3か月パスワードを変更していません。今変えますか?と聞かれるが、パスワードを考えるのが面倒だ。

などなどの場合に、自分でキーボードを打って適当に文字入力するのが面倒だ。

それに、大体いつもキーボードの

A S D F G H J K L

の付近の文字を使う事が多いので、

fasfASFjasLKLJLffaafs

みたいな似通った文字列になってしまう。

そういう場合に、一瞬でパスワードの候補を生成してくれるとそれをコピペして使うだけで良いので手間が省ける。

利用したパスワードはメモ帳にでも保管しておけば良い。

そういうサービスなのだが、前からおかしいと思っていたのだ。

実は数か月前からおかしいと思っていた

このサービスは数か月前に作成して公開したのだが、利用者さんの数を数える為にカウンターを設置した。

ところが、何日経っても、何十日経っても、何か月経ってもカウンターが 0 なのだ。

他の自作オンラインサービスと比べてみると、

パスワード自動生成                      カウンターがゼロのまま動かない

文字変換オンラインサービス      カウンター正常動作

オンライン正規表現データ変換     カウンター正常動作

だったのだ。

まあ、パスワード自動生成などと言う機能はあまり人気が無いのかなと思いつつ、それでも一人くらいアクセスしてもいいんじゃないの?と思っているうちに数か月が経ち、2016年の新年を迎えたのだ。

そして、利用者さんからのご指摘コメント

やはり何か問題が有って正常動作していなかったのだ。

原因究明

このオンラインサービスはVisual Studioの空のASP.NETプロジェクトにフォームを一個追加しているだけの簡単なものだ。

自宅のパソコンでデバッグする時には、

http://localhost:7821/PasswordGen.aspx

のように、ローカルホスト上のIISサーバーでデバッグ出来る。ここでは正常に動く。

次に、本番のサーバーwareko.netに発行した場合には、

のURLにアクセスすると、ワテのパソコンからは正常に動作している。

ところが、他の皆さんのパソコンからはエラーして見えないようなのだ。

一体全体、どんなエラーが出ているのか?

オンライン画面キャプチャーサービスを利用する

こういう時には、ホームページのアドレスを指定するとその画面を表示して画像に変換してどんなふうに見えているのかを知らせてくれるサービスが便利だ。

キーワード web online capture

などで検索すると沢山ある。

Shrink The Web is Relaunching Soon!
Automated Browser Screenshot Service
Browserling ??? Online cross-browser testing
Try for free now! Cross browser test your websites online in all web browsers ??? Internet Explorer, Edge, Chrome, Safar...
301 Moved Permanently

https://www.url2png.com/      あまりお勧めしない(以下に理由あり)

などだ。これ以外にも無数にある。

上記リストの末尾のサイトを利用してワテのパスワード生成サービスの画面をキャプチャしたのが下図だ。

確かにエラーしている。

ASP.NETでプログラミングしていると良く出るエラーだ。

指示通り、Web.Configに以下の行を追加してエラーの詳細を確認しようとしたが、同じエラーが出て詳細が分からない。

  <system.web>
    <customErrors mode="Off"/>
  </system.web>

困った困ったこまどり姉妹

まいったまいったマイケルジャクソン

解決

その後、数時間の苦闘の結果、解決した。

原因は単純で、訪問者さんの数を数えるカウンター機能を自作したのだが、そこにバグが有ったのだ。

カウンター機能の実装方法は沢山あると思うが、ワテの場合初心者なので、安易な方法を採用した。

サーバー上に一つのテキストファイルを作成しておいて、その中に訪問者さんの数を保管する仕組みだ。

ページが表示される度に、そのファイルから今までの訪問者さんの累計を読み取り、1を足してそのファイルに上書きする。

非常に簡単な動作なのだが、問題は、自分自身がテスト目的でこのページを訪問してもカウントされる。

なので、自分は数えないようにするためにIPアドレスが自分のパソコンの場合には数えないようにしていた。

この部分も問題なく動く。

さて、問題はここからだ。

原因はファイルの書き込み権限が無かった

ローカルのパソコンでテストして、それをサーバー上に発行するのだが、そのテキストファイルも発行する。発行前のローカルのパソコンではIISサーバーやIIS Expressサーバーはそのファイルに対して自由に読み書きが出来るようだ。

一方、本番環境のWindows 2012R2 Server上のIISサーバーのデフォルト設定では、ファイルの読み込み権限はあるが書き込み権限は無いようだ。自分で何か設定したのかどうか覚えていないが、まあ、セキュリティ上の理由でデフォルトがそうなっているのだろう。

なので、そのファイルを発行しただけだと、IISサーバーさんは読めるけれど書き込めない。その結果、カウンターの数字を一個増やして書き込む処理でエラーしていたのだ。でも自分自身のアクセスを除外しているのでワテのパソコンからアクセスした場合には再現しないのだ。

IUSRとIIS_USERSさんに書き込み権限を与えて解決

上記のような状況は、いままでにASP.NETのプログラミングをして来て何度か遭遇した問題なので、今回の問題調査の早い段階で気付いていた。

それで、カウンターファイルへの書き込み権限を

IUSR

IIS_USERS

の二人のユーザーに対して許可しておくとファイル書き込みが出来るようになって解決するはずなのだ。

ところが今回はこの設定をしても解決しない。

二番目の問題はキャプチャーサービスにあった

WEBプログラミングをやっている人なら良く経験していると思うが、

キャッシュというのは厄介なやつだ。

古いデータを貯めているので、最新の画面を表示させたくても出ない場合がある。

ブラウザーのF5キーでスーパーリロード(強制再描画)をしてやると大体の場合は最新のページが読み込まれる。

ところが、今回利用したURL2PNGと言うサイトは、そういうのとは別にどこかにキャッシュか何かで古いデータを蓄えているような感じだ。

なので、Visual Studioの画面で一生懸命怪しげな箇所を修正して、それをビルドしてサーバーに発行して、表示させてみて、、、みたいな作業をひたすら繰り返していて、自分のパソコンでは正常に表示されているのに、URL2PNGでは相変わらずエラー表示のままなのだ。

夜中にラジオの正月番組を聴きながら作業したのも悪かった。

集中力が発揮できないので泥沼に嵌まる。

まとめ

数時間の試行錯誤の結果解決せず、今朝、起きて再開。

何となく別のキャプチャーサイトを使ってみたら、昨晩URL2PNGではエラーだった画面が、正常に表示されている。

上記のキャプチャーサイトのうち、末尾のURL2PNG以外の残りの3サイトは全て正常表示だ。

なので、URL2PNGはお勧めしない。

あまり良い作りでは無いようだ。

と言う事で、新年早々、数か月前から気になっていた問題も解決してスッキリ。

これで、パスワード自動生成サービスの利用者さんの数が飛躍的に伸びる事は間違いない。

ちなみに、用心深いワテは、物凄く長いパスワードを使っている。

そのサイトに入力できる最長の文字列を入れるようにしている。

中には128文字とかいうのも有る。

今のところ、スパコンを使っても破られる心配は無い。

当記事で紹介したパスワード自動生成サービス

改良型パスワード自動生成サービス

本を読む

スポンサーリンク
コメント募集

この記事に関して何か質問とか補足など有りましたら、このページ下部にあるコメント欄からお知らせ下さい。

ASP.NETIIS
スポンサーリンク
シェアする
warekoをフォローする
スポンサーリンク

コメント