ASP.NET Application Providers相信大家都已经非常熟悉,它为我们开发ASP.NET应用程序提供了方便。
比如在Visual Studio控件工具箱中的Login部分,就是基于Membership provider、Session provider和Profile provider,大大地简化了我们在开发过程中处理与用户相关的功能。
(更多Provider的信息请查看http://msdn.microsoft.com/en-us/library/aa479030.aspx)
ASP.NET Provider架构示意图
ASP.NET Provider的类结构图
Azure Provider是什么
Azure上的应用程序也是ASP.NET 应用程序,所以它也支持ASP.NET 的Provider模型。不同的是,我们平时用的Provider是基于关系数据库的(如SQL Server),而“云端”上Provider自然也需要使用“云端”的数据解决方案——Windows Azure Storage。
云平台是基于分布式计算的。这就意味着,你的同一个应用程序可能会分布在不同的机器上。所以包括Session在内的各种用户数据不能放在host主机上,必须通过Windows Azure Storage来统一管理。
微软认为:基于Windows Azure Storage的provider 比传统SQL provider具有以下优势:
在保持与SQL provider完全相同的使用方法(不用做任何代码修改)的基础上,
- 并行处理更强悍。
- 分页查询更方便。
- 计算能力更牛X。
- 运行更稳定。
Azure Provider的原理
在Windows Azure SDK(March 2009 CTP)中,微软已经提供了可直接使用的Azure版ASP.NET Provider。包括membership, role, profile, session state 4种providers。
打开Azure版ASP.NET Provider项目,非常一目了然。以下的4个文件与4种provider一一对应。
拿TableStorageMembershipProvider来说,它其实是继承了MembershipProvider类(参照上文的provider类结构图),override了MembershipProvider类里与数据操作相关的方法,将它们换成使用Windows Azure Table Storage版本的。- public class TableStorageMembershipProvider : MembershipProvider
复制代码
配置使用Azure Provider:
刚才说了,从传统的SQL Provder转换到使用Azure Provider,不用做任何代码上的改动,只需要更改配置文件就可以了。
下面是MemshipProvider的配置示例。(其他Provider也类似,请参考附件中的代码)
type="Microsoft.Samples.ServiceHosting.AspProviders.TableStorageMembershipProvider"
description="Membership provider using table storage"
applicationName=" roviderTest"
tableServiceBaseUri=”your table service endpoint”
allowInsecureRemoteEndpoints=”false”
accountName="youraccountname"
sharedKey="yoursharedkey"
membershipTableName="Membership"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="false"
minRequiredPasswordLength="1"
minRequiredNonalphanumericCharacters="0"
requiresUniqueEmail="true"
passwordFormat="Hashed"
/>
代码下载:
使用Azure Provider的示例代码:AspProvidersDemo.rar
Azure Provider源代码:AspProviders.rar
StorageClient:StorageClient.rar
______________________分割线____________________________________________________
Azure Provider的数据层面:
Provider
| Storage
| Membership
| Table storage
| Profile
| Table storage for storing management data
Blob storage for storing the actual profile data
| Session state
| Table storage for storing management data
Blob storage for storing the actual session state
| Role provider
| Table storage
|
Membership Table
Column
| Type
| Comment
| Partition key
| String
| Concatenation of application name and user name
| Row key
| String
| Unused, empty string
| User name
| String
|
| User id
| Guid
|
| Password
| String
| Max 128 characters because of encode limitations
| Password format
| String
| .NET regular expression
| Password salt
| String
|
| Email
| String
|
| Password question
| String
|
| Password answer
| String
|
| IsApproved
| Bool
|
| IsAnonymous
| Bool
|
| IsLockedOut
| Bool
|
| CreateDate
| DateTime
| In UTC
| LastLoginDate
| DateTime
| In UTC
| LastPasswordChangeDate
| DateTime
| In UTC
| LastLockoutDate
| DateTime
| In UTC
| LastActivityDate
| DateTime
| In UTC
| FailedPasswordAttemptCount
| Int
|
| FailedPasswordAttemptWindowStart
| DateTime
| In UTC
| FailedPasswordAnswerAttemptCount
| Int
|
| FailedPasswordAnswerAttemptWindowStart
| DateTime
| In UTC
| Comment
| String
|
| ProfileLastUpdated
| DateTime
| In UTC
| ProfileBlobName
| String
| Blob where profile data is stored
| ProfileIsCreatedByProfileProvider
| Bool
|
| ProfileSize
| Int
| Size of profile data; saved to save roundtrips
|
Role Table
Column
| Type
| Comment
| Partition key
| String
| Concatenation of application name and user name
| Row key
| String
| Role name
| Application name
| String
|
| User name
| String
|
| Role name
| String
|
|
Session State Table
Column
| Type
| Comment
| Partition key
| String
| Application name + Session id
| Row key
| String
| Not used, empty string
| Id
| String
|
| Application name
| String
|
| Blob name
| String
| References session blob
| Timeout
| DateTime
|
| Expires
| DateTime
| In Utc
| Created
| DateTime
| In Utc
| Lock date
| DateTime
| In Utc
| Locked
| Bool
|
| Lock
| Int
|
| Initialized
| bool
|
|
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |