[4]接続文字列を追加する
Windows Azureストレージの接続文字列を追加します。
ソリューションエクスプローラで、[AzureMembershipSample]クラウドサービスプロジェクト内の[ロール]フォルダーにある[WebRole1]を右クリックし、[プロパティ]をクリックします。表示された[WebRole1]のプロパティページ内の[設定]タブをクリックします。[設定の追加]ボタンをクリックし、Windows Azureストレージへのアクセスのための接続文字列を追加します。
[名前]ボックスに「DataConnectionString」と入力し、[種類]リストは[接続文字列]を選択します。[値]ボックスでは、右側の[...]ボタンをクリックし、表示された[ストレージ接続文字列]ダイアログボックスで、[開発ストレージの使用]ラジオボタンが選択されていることを確認し[OK]ボタンをクリックします。すると、[値]ボックスに「UseDevelopmentStorage=true」と入力されます(図9)。これにより、Windows Azureストレージのローカル環境である開発ストレージの使用を指定します。最後に、[WebRole1]のプロパティページを保存します。
[5]Web.configを修正する
WebRole1プロジェクト直下にあるWeb.configを開き、リスト1のようにWindows Azureストレージの接続文字列を追加します(太字部分)。
<configuration>
<appSettings>
<add key="DataConnectionString" value="UseDevelopmentStorage=true"/>
</appSettings>
<system.diagnostics>
...
</system.diagnostics>
...
</configuration>
後ほどユーザーやロール管理のために使用する[ASP.NET Webサイト管理ツール]を実行するためには、手順6.で行ったクラウドサービスプロジェクト内でのWindows Azureストレージの接続文字列の追加に加え、Web.config上でも同様の設定を行う必要があります。
なお、<appSettings>要素内にAspProvidersプロジェクトの他の設定項目を記述することもできます(表2)。ここでは、既定値をそのまま使用しています。詳細については、AspProvidersプロジェクトのConfiguration.csファイル内のConfigurationクラスを参照してください。
| キー名 | 説明 | 既定値 |
| DataConnectionString | Windows Azureストレージの接続文字列 | (なし) |
| DefaultMembershipTableName | メンバーシップ情報格納用テーブル名 | Membership |
| DefaultRoleTableName | ロール情報格納用テーブル名 | Roles |
| DefaultSessionTableName | セッション情報格納用テーブル名 | Sessions |
| DefaultSessionContainerName | セッション情報格納用ブロブのコンテナ名 | sessionprovidercontainer |
| DefaultProfileContainerName | プロファイル情報格納用ブロブのコンテナ名 | profileprovidercontainer |
次に、Web.configに既定で設定されている<membership>、<profile>、<roleManager>の各要素を、リスト2のように変更します。
<configuration>
...
<system.web>
...
<!-- Windows Azureストレージ用カスタムメンバーシッププロバイダー -->
<membership defaultProvider="TableStorageMembershipProvider" userIsOnlineTimeWindow = "20">
<providers>
<clear/>
<add name="TableStorageMembershipProvider"
type="Microsoft.Samples.ServiceHosting.AspProviders.TableStorageMembershipProvider"
description="Membership provider using table storage"
applicationName="AzureMembershipSample"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
minRequiredPasswordLength="1"
minRequiredNonalphanumericCharacters="0"
requiresUniqueEmail="true"
passwordFormat="Hashed"
/>
</providers>
</membership>
<!-- Windows Azureストレージ用カスタムロールプロバイダー -->
<roleManager enabled="true" defaultProvider="TableStorageRoleProvider" cacheRolesInCookie="true" cookieName=".ASPXROLES" cookieTimeout="30"
cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration = "true"
cookieProtection="All" >
<providers>
<clear/>
<add name="TableStorageRoleProvider"
type="Microsoft.Samples.ServiceHosting.AspProviders.TableStorageRoleProvider"
description="Role provider using table storage"
applicationName="AzureMembershipSample"
/>
</providers>
</roleManager>
<!-- Windows Azureストレージ用カスタムプロファイルプロバイダー -->
<profile enabled="true" defaultProvider="TableStorageProfileProvider">
<providers>
<clear/>
<add name="TableStorageProfileProvider"
type="Microsoft.Samples.ServiceHosting.AspProviders.TableStorageProfileProvider"
description="Profile provider using structured storage"
applicationName="AzureMembershipSample"
/>
</providers>
</profile>
</system.web>
...
</configuration>
ここでは、既定で<membership>、<profile>、<roleManager>の各要素に設定されているSQL Server用プロバイダーを、それぞれ対応するAspProvidersプロジェクトのWindows Azureストレージ用カスタムプロバイダーに変更しています。各要素内の種々の設定については、SQL Server用プロバイダーの場合とほとんど同じですので省略させていただきます。
これらの修正により、メンバーシップ機能のデータの格納先が、SQL Server ExpressからWindows Azureの開発ストレージに変更されます。
[6]Default.aspxを修正する
Default.aspxを、リスト3のように修正します(太字部分)。
<%@ Page Title="ホーム ページ" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="WebRole1._Default" %>
<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<h2>
ASP.NET へようこそ!
</h2>
<p>
<asp:LoginView ID="LoginView1" runat="server">
<AnonymousTemplate>
ログインしていません。
</AnonymousTemplate>
<LoggedInTemplate>
<asp:LoginName ID="LoginName1" runat="server" />
さんは、一般ユーザーです。
</LoggedInTemplate>
<RoleGroups>
<asp:RoleGroup Roles="Admin">
<ContentTemplate>
<asp:LoginName ID="LoginName2" runat="server" />
さんは、管理者ユーザーです。
</ContentTemplate>
</asp:RoleGroup>
</RoleGroups>
</asp:LoginView>
</p>
</asp:Content>
既定で表示されていた不要なメッセージを削除します。代わりに、LoginViewコントロールを追加し3つのテンプレートを定義します。
AnonymousTemplateは、ユーザーがログインしていない場合に使用されるテンプレートです。ここでは、「ログインしていません。」というメッセージを表示しています。
LoggedInTemplateは、ユーザーがログイン中で、かつそのユーザーが次に説明するRoleGroupsプロパティで指定されているどのロールにも属していない場合に使用されるテンプレートです。ここでは、LoginNameコントロールによりログインユーザー名を表示し、さらにそのユーザーが一般ユーザーであることを表示しています。
RoleGroupsプロパティでは、「Admin」ロール用のテンプレートを定義しています。ユーザーがログイン中で、かつ「Admin」ロールに属している場合に使用されます。ここでは、LoginNameコントロールによりログインユーザー名を表示し、さらにそのユーザーが管理者ユーザーであることを表示しています。
これで、AspProvidersプロジェクトを使用したサンプルアプリケーションの完成です。

