|
|
Posted on 2007-06-28 18:28 江南白衣 阅读(60976) 评论(9) 编辑 收藏 所属分类: WCF
不废话了。翠花,上代码: ServiceContracts: IMembershipService.cs:
1 using System; 2 using System.Web.Security; 3 using System.ServiceModel; 4 5 namespace Infrastructure.ServiceContracts 6  { 7 [ServiceContract(Namespace = http://Infrastructure.ServiceContracts/, Name = "IMembershipService", SessionMode = SessionMode.Allowed)] 8 public interface IMembershipService 9 { 10 [OperationContract] 11 MembershipUser CreateUser(string username, string password); 12 13 [OperationContract(Name = "CreateUserWithEmail")] 14 MembershipUser CreateUser(string username, string password, string email); 15 16 [OperationContract(Name = "CreateUserWithQuestion")] 17 MembershipUser CreateUser(string username, string password, string email, 18 string passwordQuestion, 19 string passwordAnswer, 20 bool isApproved, 21 out MembershipCreateStatus status 22 ); 23 24 [OperationContract(Name = "CreateUserWithProviderUserKey")] 25 MembershipUser CreateUser(string username, string password, string email, 26 string passwordQuestion, 27 string passwordAnswer, 28 bool isApproved, 29 Object providerUserKey, 30 out MembershipCreateStatus status 31 ); 32 33 [OperationContract(Name = "DeleteUserDefault")] 34 bool DeleteUser(string username); 35 36 [OperationContract] 37 bool DeleteUser(string username, bool deleteAllRelatedData); 38 39 [OperationContract] 40 MembershipUserCollection GetAllUsers(); 41 42 [OperationContract(Name = "GetAllUsersByPaging")] 43 MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords); 44 45 [OperationContract] 46 MembershipUser GetUser(); 47 48 [OperationContract(Name = "GetUserIsOnline")] 49 MembershipUser GetUser(bool userIsOnline); 50 51 [OperationContract(Name = "GetUserByProviderUserKey")] 52 MembershipUser GetUser(Object providerUserKey); 53 54 [OperationContract(Name = "GetUserByUsername")] 55 MembershipUser GetUser(string username); 56 57 [OperationContract(Name = "GetUserByKeyAndIsOnline")] 58 MembershipUser GetUser(Object providerUserKey, bool userIsOnline); 59 60 [OperationContract(Name = "GetUserByNameAndIsOnline")] 61 MembershipUser GetUser(string username, bool userIsOnline); 62 63 [OperationContract] 64 string GetUserNameByEmail(string emailToMatch); 65 66 [OperationContract] 67 void UpdateUser(MembershipUser user); 68 69 [OperationContract] 70 bool ValidateUser(string username, string password); 71 } 72 } 73
ServiceImplementation: MembershipService.cs:
1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.ServiceModel; 5 using System.Web.Security; 6 using Infrastructure.ServiceContracts; 7 8 namespace CoralMIS.Infrastructure.ServiceImplementation 9  { 10 [ServiceBehavior(Name = "MembershipService", 11 Namespace = http://Infrastructure.ServiceImplementation/2007/06)] 12 public class MembershipService : IMembershipService 13 { 14 IMembershipService 成员#region IMembershipService 成员 15 16 CreateUser#region CreateUser 17 18 public MembershipUser CreateUser(string username, string password) 19 { 20 return Membership.CreateUser(username, password); 21 } 22 23 public MembershipUser CreateUser(string username, string password, string email) 24 { 25 return Membership.CreateUser(username, password, email); 26 } 27 28 public MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, 29 string passwordAnswer, bool isApproved, out MembershipCreateStatus status) 30 { 31 return 32 Membership.CreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, 33 out status); 34 } 35 36 public MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, 37 string passwordAnswer, bool isApproved, object providerUserKey, 38 out MembershipCreateStatus status) 39 { 40 return 41 Membership.CreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, 42 providerUserKey, out status); 43 } 44 45 #endregion 46 47 DeleteUser#region DeleteUser 48 49 public bool DeleteUser(string username) 50 { 51 return Membership.DeleteUser(username); 52 } 53 54 public bool DeleteUser(string username, bool deleteAllRelatedData) 55 { 56 return Membership.DeleteUser(username, deleteAllRelatedData); 57 } 58 59 #endregion 60 61 GetAllUsers#region GetAllUsers 62 63 public MembershipUserCollection GetAllUsers() 64 { 65 return Membership.GetAllUsers(); 66 } 67 68 public MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords) 69 { 70 return Membership.GetAllUsers(pageIndex, pageSize, out totalRecords); 71 } 72 73 #endregion 74 75 GetUser#region GetUser 76 77 public MembershipUser GetUser() 78 { 79 return Membership.GetUser(); 80 } 81 82 public MembershipUser GetUser(bool userIsOnline) 83 { 84 return Membership.GetUser(userIsOnline); 85 } 86 87 public MembershipUser GetUser(object providerUserKey) 88 { 89 return Membership.GetUser(providerUserKey); 90 } 91 92 public MembershipUser GetUser(string username) 93 { 94 return Membership.GetUser(username); 95 } 96 97 public MembershipUser GetUser(object providerUserKey, bool userIsOnline) 98 { 99 return Membership.GetUser(providerUserKey, userIsOnline); 100 } 101 102 public MembershipUser GetUser(string username, bool userIsOnline) 103 { 104 return Membership.GetUser(username, userIsOnline); 105 } 106 107 #endregion 108 109 public string GetUserNameByEmail(string emailToMatch) 110 { 111 return Membership.GetUserNameByEmail(emailToMatch); 112 } 113 114 public void UpdateUser(MembershipUser user) 115 { 116 Membership.UpdateUser(user); 117 } 118 119 public bool ValidateUser(string username, string password) 120 { 121 return Membership.ValidateUser(username, password); 122 } 123 124 #endregion 125 } 126 }
至于Role的实现,请参考上面。app.config,web.config中的<System.Web>原来怎么配置现在还怎么配置,我在这里只是简单地给出了一个思路,也可以很方便的改为Web Service,Remoting服务包装。欢迎大家拍砖:)
BTW:《Programming.WCF.Services》这本书里的Credentials Manager utility也有上Membership和Role的包装,可是在我看来过于复杂了:),所以自己做了上面的工作。PWS这本书的随书代码(WCF的一些扩展,一些工具,帮助类)写得很不错,我手上有,不知道是否应该放出来跟大家Sharing,请各位指点,谢谢。
Feedback
向大伙请教下,是否应该把MembershipUser ,MembershipUserCollection 抽出来做成DataContract?
我也做过一个类似的封装和扩展,不过不是针对WCF的……我觉得不需要把MembershipUser和MembershipUserCollection抽出来,因为这两者的作用是handle数据而不是服务的一部分,i.e.,就是这两者将会在服务中被传递,算是翠花上的酸菜而不是翠花自己。
呵呵,谢谢楼上的,这个post我已经放在首页上了,不知道怎的确被移走了,怎么回事?
有点没搞懂楼主的意思...
你的MembershipUser,MembershipUserCollection已经是DataContract了,不然怎么传递到客户端去?
你的"抽出来做成DataContract"是什么意思?
楼上,那样做的目的是为了脱离Membership命名空间下的相关类,SOA。。。。
@flyingfish
我也郁闷,这么多人看了才几个人留言:)
|