[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プロジェクトを使用したサンプルアプリケーションの完成です。