实现分布式的Membership和上下文传递模板

上传人:枫** 文档编号:556412428 上传时间:2023-12-02 格式:DOC 页数:14 大小:372KB
返回 下载 相关 举报
实现分布式的Membership和上下文传递模板_第1页
第1页 / 共14页
实现分布式的Membership和上下文传递模板_第2页
第2页 / 共14页
实现分布式的Membership和上下文传递模板_第3页
第3页 / 共14页
实现分布式的Membership和上下文传递模板_第4页
第4页 / 共14页
实现分布式的Membership和上下文传递模板_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《实现分布式的Membership和上下文传递模板》由会员分享,可在线阅读,更多相关《实现分布式的Membership和上下文传递模板(14页珍藏版)》请在金锄头文库上搜索。

1、实现分布式的 Membership 和上下文传递通过上一篇了解了模块内基本的层次划分之后,接下来我们来聊聊 PetShop 中一些基本基础功能的实现,以及一些设计、架构上的应用如何同WCF 进行集成。本篇讨论两个问题:实现分布式的 Membership和客户端到服务端上下文(Context)的传递。一、 如何实现用户验证对登录用户的验证是大部分应用所必需的,对于 ASP.NET 来说, 用户验证及帐号管理实现在成员资格( Membership )模块中。同 ASP.NET的其他模块一样,微软在设计Membership的时候,为了实现更好地可扩展性,采用了策略(Strategy)设计模式:将模块

2、相关的功能定义在被称为 Provider 的抽象类型中,并通过继承它提供具体的Provider。如果这些原生的Provider 不能满足你的需求,你也可以通过继承该抽象的Provider,创建自定义的 Provider 。通过 ASP.NET 提供的配置,你可以很轻易地把自定义的Provider 应用到你的应用之中。在一般情况下, 最终的编程人员并不通过Provider 调用相关的功能, 而是通过一个外观 ( Facade)类实现对相关功能的调用。ASP.NET 成员资格模块的设计基本上可以通过下面的类图1 反映出来:最终的编程人员通过外观类型( Fa?ade Class)Membership

3、调用成员资格相关的功能,比如用户认证、用户注册、修改密码等; Membership 通过抽象类 MembershipProvider提供所有的功能,至于最终的实现,则定义在一个个具体的MembershipProvider中。基于成员资格信息不同的存储方式,ASP.NET提供了两个原生的MembershipProvider: SqlMembershipProvider和ActiveDirectoryMembershipProvider ,前者基于 SQL Server 数据库,后者基于AD。如果这两个 MembershipProvider 均不能满足需求,我们还可以自定义MembershipPr

4、ovider 。clip_image002图 1 ASP.NET Membership 设计原理我们的案例并不会部署于AD 之中,所以不能使用ActiveDirectoryMembershipProvider;直接通过 Web 服务器进行数据库的存取又不符合上述物理部署的要求(通过应用服务器进行数据 库 访 问 ), 所 以SqlMembershipProvider也 不 能 为 我 们 所 用 。 为 此 需 要 自 定 义MembershipProvider ,通过 WCF服务调用的形式提供成员资格所有功能的实现。我们将该自定 义 MembershipProvider称 为 RemoteM

5、embershipProvider。 图2揭 示 了RemoteMembershipProvider实现的原理: RemoteMembershipProvider通过调用WCF 服务MembershipService 提供对成员资格所有功能的实现;MembershipService则通过调用Membership 实 现 服 务 ; 最 终 的 实 现 还 是 落 在 了 SqlMembershipProvider这个原生的MembershipProvider 上。clip_image004图 2 RemoteMembershipProvider实现原理1、服务契约和服务实现首先来看看 Memb

6、ershipService 实现的服务契约的定义。由于MembershipService 最终是为RemoteMembershipProvider这个自定义 MembershipProvider服务的,所以服务操作的定义是基于 MembershipProvider的 API 定义。 MembershipProvider 包含两种类型的成员: 属性和方法,简单起见,我们可以为MembershipProvider每一个抽象方法定义一个匹配的服务操作;而对于所有属性,完全采用服务端(应用服务器)的MembershipProvider 相关属性。在 RemoteMembershipProvider 初

7、始化的时候通过调用 MembershipService 获取所有服务端MembershipProvider 的配置信息。 为此,我们为 MembershipProvider 的所有属性定义了一个数据契约: MembershipConfigData 。在 PetShop 中, MembershipConfigData 和服务契约一起定义在项目中。1:2:3:4: 5:6: public class MembershipConfigData7: 8:DataMember9:public string ApplicationName10: get; set; 11:12:DataMember13:p

8、ublic bool EnablePasswordReset14: get; set; 15:16:DataMember17:public bool EnablePasswordRetrieval18: get; set; 19:20:DataMember21:public int MaxInvalidPasswordAttempts22: get; set; 23:24:DataMember25:public int MinRequiredNonAlphanumericCharacters26: get; set; 27:28:DataMember29:public int MinRequi

9、redPasswordLength30: get; set; 31:32:DataMember33:public int PasswordAttemptWindow34: get; set; 35:36:DataMember37:public MembershipPasswordFormat PasswordFormat38: get; set; 39:40:DataMember41:public string PasswordStrengthRegularExpression42: get; set; 43:44:DataMember45:public bool RequiresQuesti

10、onAndAnswer46: get; set; 47:48:DataMember49:public bool RequiresUniqueEmail50: get; set; 51: 52: 在 服 务 契 约 中 , 定 义 了 一 个 额 外 的 方 法GetMembershipConfigData获 取 服 务 端MembershipProvider的所有配置信息,而对于服务操作的定义,则与MembershipProvider同名抽象方法相对应。1: using System.ServiceModel;2:3:4: 5:6: public interface IMembershipSe

11、rvice7: 8:OperationContract9:bool ChangePassword(string username, string oldPassword, stringnewPassword);10:OperationContract11: bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer);12:OperationContract13: MembershipUser CreateU

12、ser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status);14:OperationContract15:bool DeleteUser(string username, bool deleteAllRelatedData);16:OperationContract17: MembershipUserCol

13、lection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords);18:OperationContract19:MembershipUserCollectionFindUsersByName(string usernameToMatch,intpageIndex, int pageSize, out int totalRecords);20:OperationContract21:MembershipUserCollectionGetAllUsers(int pageIndex, int pageSize, outinttotalRecords);22:OperationContract23:int GetNumberOfUsersOnline();24:OperationContract25:string GetPassword(string username, string answer);26:OperationContract(Name=GetUserByName)27:MembershipUser G

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 演讲稿/致辞

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号