ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:22.27KB ,
资源ID:21361024      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/21361024.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实现分布式的Membership和上下文传递剖析Word格式文档下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实现分布式的Membership和上下文传递剖析Word格式文档下载.docx

1、我们将该自定义MembershipProvider称为RemoteMembershipProvider。图2揭示了RemoteMembershipProvider实现的原理:RemoteMembershipProvider通过调用WCF服务MembershipService提供对成员资格所有功能的实现;MembershipService则通过调用Membership实现服务;最终的实现还是落在了SqlMembershipProvider这个原生的MembershipProvider上。clip_image004图2 RemoteMembershipProvider实现原理1、服务契约和服务实现

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

3、时候通过调用MembershipService获取所有服务端MembershipProvider的配置信息。为此,我们为MembershipProvider的所有属性定义了一个数据契约:MembershipConfigData。在PetShop中,MembershipConfigData和服务契约一起定义在Infrastructures.Service.Interface项目中。 1: using System.Runtime.Serialization; 2: using System.Web.Security; 3: namespace Artech.PetShop.Infrastruct

4、ures.Service.Interface 4: 5: DataContract(Namespace = 6: public class MembershipConfigData 7: 8: DataMember 9: public string ApplicationName 10: get; set; 11: 12: 13: public bool EnablePasswordReset 14: 15: 16: 17: public bool EnablePasswordRetrieval 18: 19: 20: 21: public int MaxInvalidPasswordAtte

5、mpts 22: 23: 24: 25: public int MinRequiredNonAlphanumericCharacters 26: 27: 28: 29: public int MinRequiredPasswordLength 30: 31: 32: 33: public int PasswordAttemptWindow 34: 35: 36: 37: public MembershipPasswordFormat PasswordFormat 38: 39: 40: 41: public string PasswordStrengthRegularExpression 42

6、: 43: 44: 45: public bool RequiresQuestionAndAnswer 46: 47: 48: 49: public bool RequiresUniqueEmail 50: 51: 52:在服务契约中,定义了一个额外的方法GetMembershipConfigData获取服务端MembershipProvider的所有配置信息,而对于服务操作的定义,则与MembershipProvider同名抽象方法相对应。 using System.ServiceModel; ServiceContract(Namespace= public interface IMemb

7、ershipService OperationContract bool ChangePassword(string username, string oldPassword, string newPassword); bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer); MembershipUser CreateUser(string username, string password, stri

8、ng email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status); bool DeleteUser(string username, bool deleteAllRelatedData); MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int tota

9、lRecords); MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords); MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords); int GetNumberOfUsersOnline(); string GetPassword(string username, string answer); O

10、perationContract(Name=GetUserByName) MembershipUser GetUser(string username, bool userIsOnline);GetUserByID MembershipUser GetUser(object providerUserKey, bool userIsOnline); string GetUserNameByEmail(string email); string ResetPassword(string username, string answer); bool UnlockUser(string userNam

11、e); void UpdateUser(MembershipUser user); bool ValidateUser(string username, string password); MembershipConfigData GetMembershipConfigData();服务的实现,则异常简单,我们须要做的仅仅是通过Membership.Provider获得当前的MembershipProvider,调用同名的属性或方法即可。MembershipService定义在Infrastructures.Service中,定义如下: using Artech.PetShop.Infrast

12、ructures.Service.Interface; namespace Artech.PetShop.Infrastructures.Service public class MembershipService : IMembershipService #region IMembershipService Members public bool ChangePassword(string username, string oldPassword, string newPassword) return Membership.Provider.ChangePassword(username,

13、oldPassword, newPassword); public bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer) return Membership.Provider.ChangePasswordQuestionAndAnswer(username, password, newPasswordQuestion, newPasswordAnswer); /其他成员 public Membersh

14、ipConfigData GetMembershipConfigData() return new MembershipConfigData ApplicationName = Membership.Provider.ApplicationName, EnablePasswordReset = Membership.Provider.EnablePasswordReset, EnablePasswordRetrieval = Membership.Provider.EnablePasswordRetrieval, MaxInvalidPasswordAttempts = Membership.

15、Provider.MaxInvalidPasswordAttempts, MinRequiredNonAlphanumericCharacters = Membership.Provider.MinRequiredNonAlphanumericCharacters, MinRequiredPasswordLength = Membership.Provider.MinRequiredPasswordLength, PasswordAttemptWindow = Membership.Provider.PasswordAttemptWindow, PasswordFormat = Members

16、hip.Provider.PasswordFormat, PasswordStrengthRegularExpression = Membership.Provider.PasswordStrengthRegularExpression, RequiresQuestionAndAnswer = Membership.Provider.RequiresQuestionAndAnswer, RequiresUniqueEmail = Membership.Provider.RequiresUniqueEmail ; #endregion2、RemoteMembershipProvider的实现由于

17、RemoteMembershipProvider完全通过调用WCF服务的方式提供对所有成员资格功能的实现,所以进行RemoteMembershipProvider配置时,配置相应的终结点就可以了。 configurationsystem.webmembership defaultProvider=RemoteProviderprovidersadd name= type=Artech.PetShop.Infrastructures.RemoteMembershipProvider,Artech.PetShop.Infrastructures, Version=1.0.0.0, Culture=

18、neutral, PublicKeyToken=null endpoint=membershipservice/providers/membership/system.websystem.serviceModelclientendpoint address=http:/localhost/PetShop/Infrastructures/MembershipService.svc behaviorConfiguration=petShopBehavior binding=ws2007HttpBinding contract=Artech.PetShop.Infrastructures.Servi

19、ce.Interface.IMembershipService name=/client/system.serviceModel/configuration在RemoteMembershipProvider中,通过Initialize方法获取配置的终结点名称并创建服务代理。通过该代理调用GetMembershipConfigData操作获取服务端MembershipProvider的配置信息,并对RemoteMembershipProvider进行初始化,RemoteMembershipProvider定义如下: using System.Collections.Specialized; us

20、ing System.Configuration; using System.Linq; using Artech.PetShop.Common; namespace Artech.PetShop.Infrastructures public class RemoteMembershipProvider : MembershipProvider private bool _enablePasswordReset; private bool _enablePasswordRetrieval; /其他字段成员 public IMembershipService MembershipProxy pr

21、ivate set; public override int MaxInvalidPasswordAttempts get return this._maxInvalidPasswordAttempts; /其他属性成员 public override void Initialize(string name, NameValueCollection config) if (!config.AllKeys.Contains(endpoint) throw new ConfigurationErrorsException(Missing the mandatory endpoint configu

22、raiton property.); this.MembershipProxy = ServiceProxyFactory.Create(config); base.Initialize(name, config); MembershipConfigData configData = this.MembershipProxy.GetMembershipConfigData(); this.ApplicationName = configData.ApplicationName; this._enablePasswordReset = configData.EnablePasswordReset; this._enablePasswordRetrieval = configData.EnablePasswordRetrieval; /.对于其他抽象方法的实现,仅仅须要通过上面创建的服务代理,调用相应的服务操作即可。注: 为了避免在服务操作调用后频繁地进行服务代理的关闭(Close)和终止(Abort)操作,我们采用基于AOP的方式实现服务的调用,将这些操作封装到一个自定义的RealProxy中,并通过ServiceProxyFactory创建该

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1