2010年9月27日月曜日

WindowsAzureでのMembershipframwork実装

こんにちは。ビジネスサービス事業部隊長です。
今日は、ASP.NETで利用できるMembershipFrameworkの実装方法です。

そもそもASP.NETのメンバシップはSQLServer上で稼働するので、
通常実装するとAPP_DATAにmdfファイルができます。
これはwebconfigのconnectionStringsに対象となるLocalSqlServerを指定できるので、
外のSQLServerにaspnetdbをこさえて実装する事も簡単です。



では、WindowsAzureではどうしたらいいでしょうか。
方法は2通りあります。

1.SQLAzureにDB作成
2.Storageを使う

簡単なのは1.です。
SQLAzureにaspnetdbを作るorインポートして、接続文字列を変えてやれば多分使えちゃうのではないでしょうか?
(すいません。未確認です。)

しかし、WindowsAzureをより深く理解する為、Storageによる実装を選択しました。

・・・といえば聞こえがいいんですけど、本当の理由は、
最初に調べて見つかった情報がStorageを使ってたからです。
SQLAzure使えるなんて気が付かなかったよ・・・


実はStorageによる実装もズルが可能です。
Microsoftからそれ用のライブラリプロジェクトが公開されてるのです。
↓のリンクからダウンロードしましょう
http://code.msdn.microsoft.com/windowsazuresamples
※このページの利用規約は絶対に読ませる気がない。俺はそう思う。

この中の、AspProvidersと、StorageClientのプロジェクトをそれぞれ
自前のプロジェクトに入れて、WEBRoleから参照設定します。以上準備完了。
あとは、webconfigの値を適当にいじるだけです。

但し、サンプルはローカルの仮想環境で実行される設定になっていますので、
そのまま配置しても動きません。
なので以下のポイントを設定しなおすのです。

あ、先にAzure上にStorageを作っておきましょう。
すると、EndPointとAccessKeyが出るのでメモっておくこと。

※塗りつぶしてるところはStorageのアカウント名と、接続文字列です。別にアカウント名は消さなくてもいいような。

EndPointは、
http://アカウント名.blob.core.windows.net/
http://アカウント名.queue.core.windows.net/
http://アカウント名.table.core.windows.net/

の3つ出ますが、今回必要なのはtableです。ここにメンバシップ用のDBが出来るわけです。

まずはweb.configのconfigurationにキーを追加します。
1.membership。変えるところはapplicationName、その他プロパティは運用にあわせて。
2.roleManager。Roleを使用するなら追加。これもap名を。cookieの設定も運用にあわせて。
3.profile。独自に情報を付け足すならこれも。BugLogではユーザーの氏名等を持たせてます。
既存のタグはコメントアウトしておきます。あと、Storageへの接続設定もappsettingsに追加。

次に、Cloudプロジェクトの設定ファイルを正しく書き換え。
内容については詳しい情報がたくさん見つかるので割愛しますが、
ポイントとしてallowInsecureRemoteEndpointsです。
これはデフォルトで""になっているのですが、azureにそのまま配置すると動かないようです。
また、falseにするならEndpointのURLをhttpsに変えるのを忘れずに。

これらの設定で、ASP.NET側の実装をいじることなくメンバシップが利用可能になるはずです。
が、今回利用しているライブラリはあくまでもサンプルというスタンスみたいですので、
中を確認して可能であれば自力で実装した方が安心かもしれません。

0 コメント:

コメントを投稿