一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

WCF版的PetShop之三:實(shí)現(xiàn)分布式的Membership和上下文傳遞

系列文章導(dǎo)航:

WCF版的PetShop之一:PetShop簡介

WCF版的PetShop之二:模塊中的層次劃分

WCF版的PetShop之三:實(shí)現(xiàn)分布式的Membership和上下文傳遞


  通過上一篇了解了模塊內(nèi)基本的層次劃分之后,接下來我們來聊聊PetShop中一些基本基礎(chǔ)功能的實(shí)現(xiàn),以及一些設(shè)計(jì)、架構(gòu)上的應(yīng)用如何同WCF進(jìn)行集成。本篇討論兩個問題:實(shí)現(xiàn)分布式的Membership和客戶端到服務(wù)端上下文(Context)的傳遞。

  一、 如何實(shí)現(xiàn)用戶驗(yàn)證

  對登錄用戶的驗(yàn)證是大部分應(yīng)用所必需的,對于ASP.NET來說,用戶驗(yàn)證及帳號管理實(shí)現(xiàn)在成員資格(Membership)模塊中。同ASP.NET的其他模塊一樣,微軟在設(shè)計(jì)Membership的時(shí)候,為了實(shí)現(xiàn)更好地可擴(kuò)展性,采用了策略(Strategy)設(shè)計(jì)模式:將模塊相關(guān)的功能定義在被稱為Provider的抽象類型中,并通過繼承它提供具體的Provider。如果這些原生的Provider不能滿足你的需求,你也可以通過繼承該抽象的Provider,創(chuàng)建自定義的Provider。通過ASP.NET提供的配置,你可以很輕易地把自定義的Provider應(yīng)用到你的應(yīng)用之中。在一般情況下,最終的編程人員并不通過Provider調(diào)用相關(guān)的功能,而是通過一個外觀(Facade)類實(shí)現(xiàn)對相關(guān)功能的調(diào)用。

  ASP.NET成員資格模塊的設(shè)計(jì)基本上可以通過下面的類圖1反映出來:最終的編程人員通過外觀類型(Façade Class)Membership調(diào)用成員資格相關(guān)的功能,比如用戶認(rèn)證、用戶注冊、修改密碼等;Membership通過抽象類MembershipProvider提供所有的功能,至于最終的實(shí)現(xiàn),則定義在一個個具體的MembershipProvider中。基于成員資格信息不同的存儲方式,ASP.NET提供了兩個原生的MembershipProvider:SqlMembershipProviderActiveDirectoryMembershipProvider,前者基于SQL Server數(shù)據(jù)庫,后者基于AD。如果這兩個MembershipProvider均不能滿足需求,我們還可以自定義MembershipProvider。

clip_image002

圖1 ASP.NET Membership 設(shè)計(jì)原理

  我們的案例并不會部署于AD之中,所以不能使用ActiveDirectoryMembershipProvider;直接通過Web服務(wù)器進(jìn)行數(shù)據(jù)庫的存取又不符合上述物理部署的要求(通過應(yīng)用服務(wù)器進(jìn)行數(shù)據(jù)庫訪問),所以SqlMembershipProvider也不能為我們所用。為此需要自定義MembershipProvider,通過WCF服務(wù)調(diào)用的形式提供成員資格所有功能的實(shí)現(xiàn)。我們將該自定義MembershipProvider稱為RemoteMembershipProvider。圖2揭示了RemoteMembershipProvider實(shí)現(xiàn)的原理:RemoteMembershipProvider通過調(diào)用WCF服務(wù)MembershipService提供對成員資格所有功能的實(shí)現(xiàn);MembershipService則通過調(diào)用Membership實(shí)現(xiàn)服務(wù);最終的實(shí)現(xiàn)還是落在了SqlMembershipProvider這個原生的MembershipProvider上。

clip_image004

圖2 RemoteMembershipProvider實(shí)現(xiàn)原理

  1、服務(wù)契約和服務(wù)實(shí)現(xiàn)

  首先來看看MembershipService實(shí)現(xiàn)的服務(wù)契約的定義。由于MembershipService最終是為RemoteMembershipProvider這個自定義MembershipProvider服務(wù)的,所以服務(wù)操作的定義是基于MembershipProvider的API定義。MembershipProvider包含兩種類型的成員:屬性和方法,簡單起見,我們可以為MembershipProvider每一個抽象方法定義一個匹配的服務(wù)操作;而對于所有屬性,完全采用服務(wù)端(應(yīng)用服務(wù)器)的MembershipProvider相關(guān)屬性。在RemoteMembershipProvider初始化的時(shí)候通過調(diào)用MembershipService獲取所有服務(wù)端MembershipProvider的配置信息。為此,我們?yōu)镸embershipProvider的所有屬性定義了一個數(shù)據(jù)契約:MembershipConfigData。在PetShop中,MembershipConfigData和服務(wù)契約一起定義在Infrastructures.Service.Interface項(xiàng)目中。

   1: using System.Runtime.Serialization;
   2: using System.Web.Security;
   3: namespace Artech.PetShop.Infrastructures.Service.Interface
   4: {
   5:     [DataContract(Namespace = "http://www.artech.com/")]
   6:     public class MembershipConfigData
   7:     {
   8:         [DataMember]
   9:         public  string ApplicationName
  10:         { get; set; }
  11:  
  12:         [DataMember]
  13:         public bool EnablePasswordReset
  14:         { get; set; }
  15:  
  16:         [DataMember]
  17:         public bool EnablePasswordRetrieval
  18:         { get; set; }
  19:  
  20:         [DataMember]
  21:         public int MaxInvalidPasswordAttempts
  22:         { get; set; }
  23:  
  24:         [DataMember]
  25:         public int MinRequiredNonAlphanumericCharacters
  26:         { get; set; }
  27:  
  28:         [DataMember]
  29:         public int MinRequiredPasswordLength
  30:         { get; set; }
  31:  
  32:         [DataMember]
  33:         public int PasswordAttemptWindow
  34:         { get; set; }
  35:  
  36:         [DataMember]
  37:         public MembershipPasswordFormat PasswordFormat
  38:         { get; set; }
  39:  
  40:         [DataMember]
  41:         public string PasswordStrengthRegularExpression
  42:         { get; set; }
  43:  
  44:         [DataMember]
  45:         public bool RequiresQuestionAndAnswer
  46:         { get; set; }
  47:  
  48:         [DataMember]
  49:         public bool RequiresUniqueEmail
  50:         { get; set; }
  51:     }
  52: }

NET技術(shù)WCF版的PetShop之三:實(shí)現(xiàn)分布式的Membership和上下文傳遞,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 成年香蕉大黄美女美女 | 国产图片综合 | 国产精品二区三区 | 国产精品女人在线观看 | 女人与拘一级毛片 | 午夜激情在线观看 | 4hu四虎永久地址 | 欧美日韩一区二区在线观看视频 | 五月婷婷伊人 | 亚洲综合激情小说 | 国产玖玖玖精品视频 | 午夜精品久视频在线观看 | 精品欧美一区二区三区精品久久 | 国产高清免费午夜在线视频 | 六月天色 | 亚洲国产精品久久 | 一区二区三区精品 | 亚洲香蕉伊综合在人在线 | 亚洲激情综合 | 久久久国产乱子伦精品 | 青青草99久久精品国产综合 | 天堂资源在线官网资源 | 亚洲女人天堂网 | 成年人黄色网址 | 中文字幕国产在线 | 婷婷色影院 | 免费女人扒开下面无遮挡 | 99久久香蕉国产综合影院 | 国产女同一区二区三区五区 | 美女网站黄色 | 国内精品久久久久久中文字幕 | 国产精品一区二区在线播放 | 亚洲成年网 | 91天堂97年嫩模在线观看 | 嫩草免费| 国产成人精品亚洲77美色 | 伊人亚洲综合 | 色视频在线观看在线播放 | 色免费看 | 精品视频午夜一区二区 | 国产日韩三级 |