江南白衣

陌上發花,可以緩緩醉矣
忍把浮名,換了淺斟低唱
我不是聖賢豪士,我衹有一腔熱血
posts - 113, comments - 422, trackbacks - 14, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

把Membership,Role包装为WCF服务

Posted on 2007-06-28 18:28 江南白衣 阅读(60976) 评论(9)  编辑 收藏 所属分类: WCF
  不废话了。翠花,上代码:

ServiceContracts:
  IMembershipService.cs:
  
 1using System;
 2using System.Web.Security;
 3using System.ServiceModel;
 4
 5namespace 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:
    
  1using System;
  2using System.Collections.Generic;
  3using System.Text;
  4using System.ServiceModel;
  5using System.Web.Security;
  6using Infrastructure.ServiceContracts;
  7
  8namespace CoralMIS.Infrastructure.ServiceImplementation
  9{
 10    [ServiceBehavior(Name = "MembershipService",
 11       Namespace = http://Infrastructure.ServiceImplementation/2007/06)]
 12    public class MembershipService : IMembershipService
 13    {
 14        IMembershipService 成员
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

#1楼 [楼主]   回复  引用  查看    

2007-06-28 18:53 by 江南白衣      
向大伙请教下,是否应该把MembershipUser ,MembershipUserCollection 抽出来做成DataContract?

#2楼    回复  引用  查看    

2007-06-28 23:58 by Henry Liang      
我也做过一个类似的封装和扩展,不过不是针对WCF的……我觉得不需要把MembershipUser和MembershipUserCollection抽出来,因为这两者的作用是handle数据而不是服务的一部分,i.e.,就是这两者将会在服务中被传递,算是翠花上的酸菜而不是翠花自己。

#3楼 [楼主]   回复  引用  查看    

2007-06-29 00:15 by 江南白衣      
呵呵,谢谢楼上的,这个post我已经放在首页上了,不知道怎的确被移走了,怎么回事?

#4楼    回复  引用    

2007-06-29 17:45 by Woody [未注册用户]
有点没搞懂楼主的意思...
你的MembershipUser,MembershipUserCollection已经是DataContract了,不然怎么传递到客户端去?
你的"抽出来做成DataContract"是什么意思?

#5楼 [楼主]   回复  引用  查看    

2007-10-04 22:10 by 江南白衣      
楼上,那样做的目的是为了脱离Membership命名空间下的相关类,SOA。。。。

#6楼    回复  引用  查看    

2007-12-10 22:05 by flyingfish      
这个文章访问量这么高啊,6万多。牛。

#7楼 [楼主]   回复  引用  查看    

2007-12-11 15:26 by 江南白衣      
@flyingfish
我也郁闷,这么多人看了才几个人留言:)

#8楼    回复  引用  查看    

2007-12-11 17:20 by flyingfish      
@江南白衣
呵呵,没用过所以不感妄加评论。

#9楼    回复  引用    

2008-01-11 13:20 by 牛人 [未注册用户]
我是来看蝴蝶的,真漂亮

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-07-08 18:42 编辑过


相关链接: