さて夏休みも終わったので、久々にWindows2008ネタをやります。
前回 はapplicationHost.configでサーバー全体の設定を行ってみましたが、
各仮想ディレクトリ固有の設定はそのディレクトリ下のWeb.configに記述する事になっていますので
今回はこれを試してみます。
このWeb.configはASP.NETにあるWeb.configと全く同じもので、Web.configの中にASP.NETとIISの設定が
両方入ることになります。
また以前はVisual Studio2005の[ASP.NET 構成]で行っていたASP.NETのメンバーシップやSMTP電子メールの
登録がIISの管理ツールからも行えるようになっています。
■ テスト用WEBアプリ作成
まずASP.NETで以下のWebアプリを作成します。
1. C:\inetpub\wwwroot下にWebSite1という名称でWebサイトを作成します。
2. default.aspxにはGridViewコントロールを貼り付け、SQL Server 2005上に作成したSALESデータベースの
ItemMasterテーブル(売上管理DBの商品マスターといったところです)よりデータを取得し一覧表示する
ように設定します。
3. Login.aspxを追加しこれにはLoginコントロールを貼り付けます。
これはフォーム認証の認証画面として使用します。
またHyperLinkコントロールも追加し文言を「パスワードを忘れた方はこちら」とし
リンク先を4の画面にします。
この時点でWebSite1下のweb.configは以下のようになっています。
<connectionStrings>にある接続文字列"ConnectionString"はdefault.aspxのGridViewコントロールが使用する
接続文字列です。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings />
<connectionStrings>
<add name="ConnectionString" connectionString="Data Source=WIN2K8;Initial Catalog=SALES;User
ID=sa;Password=Win2k8Test" providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<compilation debug="false" />
<authentication mode="Windows">
<authorization>
<deny users="?" />
</authorization>
</system.web>
</configuration>
4. WebSite1の下にPasswordRecoveryというディレクトリを追加しその下にPasswordRecovery.aspxを追加し
それにPasswordRecoveryコントロールを貼り付けます。
これはパスワードを忘れた場合にパスワードの再発行を行う画面として使用します。
またこの画面には匿名認証で入れるようにする必要がある為、PasswordRecoveryディレクトリ下に
Web.configを追加し匿名認証を許可するように設定します。
PasswordRecovery下のweb.configはこの時点で以下のようになっています。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings />
<connectionStrings />
<system.web>
<authorization>
<allow users="?" />
</authorization>
</system.web>
</configuration>
■[インターネットインフォメーションサービス(IIS)マネージャー]での設定
5.[管理ツール]より[インターネットインフォメーションサービス(IIS)マネージャー]を起動して
WebSite1を選択し、[接続文字列]を選択します。

2のGridViewコントロール貼り付け時に作成した接続文字列"ConnectionString"の設定が
ここでも見れます。
また"LocalSqlServer"という接続文字列も確認できますが、これはWebサイトへのユーザー追加に
使用されるデータプロバイダ"AspNetSqlRoleProvider"が使用する接続文字列で、デフォルトでは
WebSite1下にあるApp_DataフォルダにあるASPNETDB.mdfにアクセスするように設定されています。
で、このASPNETDB.mdfですが、SQL Server 2005 Express Editionがインストールされていれば
Visual Studio2005でWebサイトを作成した時に自動的に作成されるのですが、今回使用している
テスト環境ではSQL Server 2005のDeveloper Editionのみをインストールしている為、このファイルは
存在していません。
そこでSQL Server 2005上にUSERSという名称のデータベースを作成し、aspnet_regsql.exe を使用して
このデータベースをASP.NETメンバーシップの保存先にします。
その上で接続文字列"LocalSqlServer"をUSERSデータベースにアクセスするように設定を変更します。
これによりWebSite1下のWeb.configの<connectionString>の設定が以下のように変わります。
.<connectionStrings>
<remove name="LocalSqlServer" />
<add name="ConnectionString" connectionString="Data Source=WIN2K8;Initial Catalog=SALES;User
ID=sa;Password=Win2k8Test" providerName="System.Data.SqlClient" />
<add connectionString="Data Source=WIN2K8;Initial Catalog=USERS;User
ID=sa;Password=Win2k8Test" name="LocalSqlServer" />
</connectionStrings>
6. 次に[.NETユーザー]を選択しユーザーの追加を行います。
この情報は6で追加したUSERSデータベースに保存されます。
7. [認証]を選択し"フォーム認証"を有効にします。

これによりWebSite1下のWeb.configの<authentication mode="Windows">が
<authentication mode="Forms">に変わります。
あとは手作業でフォームの情報を記述します。
<authentication mode="Forms">
<forms loginUrl="Login.aspx" defaultUrl="default.aspx"></forms>
</authentication>
8. 今度はWebSite1下のPasswordRecoveryディレクトリを選択して[SMTP電子メール]を選択し
PasswordRecoveryコントロールが使用する電子メールの設定を行います。
これによりPasswordRecoveryディレクトリ下のWeb.configに以下の設定が追加されます。
<system.net>
<mailSettings>
<smtp from="xxxxx@xxxx.co.jp ">
<network defaultCredentials="false" host="xxxx.smtp.xxxxx.co.jp" password="xxxxx"
userName="xxxxxxxxx" />
</smtp>
</mailSettings>
</system.net>
(本当はちゃんとしたメールアドレスやメールサーバー名、ユーザーID/パスワードが入っています)
■動作確認
9. Internet Explorerを使用しWebSite1にアクセスします。
するとフォーム認証にしているのでLogin.aspxが最初に表示されます。
今回はパスワードをど忘れしてしてまったことにして、「パスワードを忘れた方はこちら」をクリックします。
10. PasswordRecovery.aspxでユーザーIDを入力し、その後6のユーザー登録の時に設定した質問と回答を
入力します。
送信ボタンをクリックすると6のユーザー登録時に登録したメールアドレスに対して新しいパスワードが
記載されたメールが送信されます。
11.もう一度、Login.aspxを表示し、今度は10で取得した新パスワードでログインします。
12.ログイン成功です。
このWeb.configを使用したサイトの設定に関してはマイクロソフトの以下のサイトにあるスクリーンキャストが
お勧めです。
Windows Developer Center:IIS7による機能のモジュール化