【IT168 技术文档】ASP.NET Application Providers 相信大家都已经非常熟悉,它为我们开发 ASP.NET 应用程序提供了方便。
比如在 Visual Studio 控件工具箱中的 Login 部分,就是基于 Membership provider、Session provider 和 Profile provider,大大地简化了我们在开发过程中处理与用户相关的功能。
第一篇:Azure Services基础:Azure Services平台
第二篇:Azure Services基础:SQL Data Services(SDS)概述
第三篇:Azure Services基础:SQL Data Services 编程基础
第四篇:Azure Services基础:.NET Services概述
第五篇:Azure Services基础:理解Windows Azure服务架构
第六篇:Azure Services基础:Windows Azure Storage概览
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 类,override 了 MembershipProvider 类里与数据操作相关的方法,将它们换成使用 Windows Azure Table Storage 版本的。
public class TableStorageMembershipProvider : MembershipProvider配置使用 Azure Provider:
刚才说了,从传统的 SQL Provder 转换到使用 Azure Provider,不用做任何代码上的改动,只需要更改配置文件就可以了。
下面是 MemshipProvider 的配置示例。
userIsOnlineTimeWindow = "20">
<providers>
<clear/>
<add name="TableStorageMembershipProvider"
type="Microsoft.Samples.ServiceHosting.AspProviders.TableStorageMembershipProvider"
description="Membership provider using table storage"
applicationName="ProviderTest"
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"
/>
</providers>
</membership>