SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

正式リリースされたWindows Azureの力

Windows AzureでASP.NETのメンバーシップ機能を使用する

正式リリースされたWindows Azureの力(6)

  • X ポスト
  • このエントリーをはてなブックマークに追加

[4]接続文字列を追加する

 Windows Azureストレージの接続文字列を追加します。

 ソリューションエクスプローラで、[AzureMembershipSample]クラウドサービスプロジェクト内の[ロール]フォルダーにある[WebRole1]を右クリックし、[プロパティ]をクリックします。表示された[WebRole1]のプロパティページ内の[設定]タブをクリックします。[設定の追加]ボタンをクリックし、Windows Azureストレージへのアクセスのための接続文字列を追加します。

 [名前]ボックスに「DataConnectionString」と入力し、[種類]リストは[接続文字列]を選択します。[値]ボックスでは、右側の[...]ボタンをクリックし、表示された[ストレージ接続文字列]ダイアログボックスで、[開発ストレージの使用]ラジオボタンが選択されていることを確認し[OK]ボタンをクリックします。すると、[値]ボックスに「UseDevelopmentStorage=true」と入力されます(図9)。これにより、Windows Azureストレージのローカル環境である開発ストレージの使用を指定します。最後に、[WebRole1]のプロパティページを保存します。

図9 Windows Azureストレージの接続文字列の追加
図9 Windows Azureストレージの接続文字列の追加

[5]Web.configを修正する

 WebRole1プロジェクト直下にあるWeb.configを開き、リスト1のようにWindows Azureストレージの接続文字列を追加します(太字部分)。

リスト1 Windows Azureストレージの接続文字列を追加(Web.config)
<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クラスを参照してください。

表2 AspProvidersプロジェクトの主な設定項目
キー名 説明 既定値
DataConnectionString Windows Azureストレージの接続文字列 (なし)
DefaultMembershipTableName メンバーシップ情報格納用テーブル名 Membership
DefaultRoleTableName ロール情報格納用テーブル名 Roles
DefaultSessionTableName セッション情報格納用テーブル名 Sessions
DefaultSessionContainerName セッション情報格納用ブロブのコンテナ名 sessionprovidercontainer
DefaultProfileContainerName プロファイル情報格納用ブロブのコンテナ名 profileprovidercontainer

 次に、Web.configに既定で設定されている<membership>、<profile>、<roleManager>の各要素を、リスト2のように変更します。

リスト2 メンバーシップ関連プロバイダーへの変更(Web.config)
<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のように修正します(太字部分)。

リスト3 Default.aspxの修正
<%@ 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プロジェクトを使用したサンプルアプリケーションの完成です。

次のページ
サンプルの実行

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
正式リリースされたWindows Azureの力連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 広瀬 嘉久(株式会社ジェイテックジャパン)(ヒロセ ヨシヒサ )

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5630 2011/01/05 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング