Posted on 2006-03-22 12:40
aspnetx 阅读(5708)
评论(37) 编辑 收藏
在asp.net2.0下我们迎来了membership这个似乎和某个框架里很象的东西。可以承认的是在这种模式下我们的代码量确实减少了不少,效率也提高了很多,而且如果你要是对其下的控件了解的很详细的话,基本上任何样式都是可以设定的。然而,我觉得这里面还是有局限性的,我不是说membership不好,象在一个从0开始做的项目的话,选择membership确实是个明智的选择,但是,再好的东西它也不是万能的对吧,并且,接过来的项目不一定都是从0开始的,很多情况可能都迫使你抛弃membership。
我以前做过的很多项目都是和CS结合到一块的,并且象这样的项目需要把cs的用户登陆信息共享到bs,存储用户信息的是项目组里定义好的一张表,这样一来,membership似乎就失去作用了。因为我们知道,目前来说,membership只能在.net下自动生成的数据库表结构中(sql2005express里或通过aspnet_regsql)才能正常工作,无论你是用什么样的provider,sql200x或者oracle还是access,都要用aspnet_regsql这样的工具来生成这样的结构,当然里面还包括其它的比如webpart信息或则角色信息,这样一来,在类似的项目中,membership似乎就失去了作用,所以用户登陆的逻辑还是要靠自己来定义的。说到这里也许有的老板说“东西是死的,人是活的,你把它生成的表改一下不就可以了么”,是的,我以前也这么想过,但是你知道这个库里面又有多少的逻辑比如存储过程,加一个或减一个字段都可能造成系统的异常,如果某位老板还在较真的话,说“那你就把存储过程什么的都改了,你在大学都学什么了?”没错,这样一来还要重写membership,确实说的有道理,不过我觉得,研究它,经过两到三个项目周期也能略有小成吧。
而更不爽的,就是webpart存储信息,如果不是windows验证的话,它就根据你membership里的不同用户来存储信息,这样一来webpart似乎也失去了作用,当然你可能问在一个和cs需要结合的项目里要webpart干什么,别忘了我们讨论的是mebership如果失效会怎么样,这个问题不一定是要在和cs结合的项目里才存在的。也许能把membership继承下来根据自己项目的情况来改写里面的逻辑,这样membership似乎也可用了,但是,不晓得开发的难度能有多大,没敢想过。(受此影响的,可能还有profile)
不过,总的来说,asp.net2.0和vs2005还是有很大的改进的,并且也很跟的上商业和技术的发展,新的数据控件确实可以节省很多的时间和代码量并且思路也清晰多了(关于sqldatasource这类控件,使用过dreamweaver的用户可能觉得和里面的创建数据集很象),只不过由于很多原因,在东北,这个技术被应用的还是很少的,另外一方面asp.net1.1升级到asp.net2.0给开发人员带来的打击,今年vista发布,好象是.net3也要出来吧,时间似乎很短,而在这样的情况下,是否使用2.0可能也是很多老板考虑的因素之一,当然如果未来10年内世界还和平的话,3.0会是一个很大的革命,伴随着vista的发布。
以上都是我个人的观点和分析的结论,技术上可能理解的还不到位所以才产生此谬论,欢迎大家批评指正。
Feedback
这恰恰是ASP.NET 2.0 Provider模型的优点。如果你不想使用aspnetdb的表结构,你完全可以自己做一个Membership Provider替换掉原有的sqlMembershipProvider。是有一定的工作量,但也不会很难。
觉得05里的MemberShip和Roles功能可以帮我们省略很多会员/权限/等方面的构架和编码.
但是自带的数据库字段有限,我们只有对其进行扩展才能满足自己系统的需求.
研究了一下.不知道怎么解决这些问题.
1、扩展信息是利用自带的Profile来保存,还是通过建立新表做关联来保存?
我认为中大型系统做新表比较合理。因为Profile存储的字段长度有限,而且在数据库存储的形式不明了。
2、显示用户列表时候,默认的GetAllUsers()是返回的MemberShipUserCollection,而MemberShipUser实体的属性都是默认的。那么如果我要显示列表中需要显示扩展信息,如 公司名,联系人等这些信息时候怎么做? 是拓展MemberShipUser还是就对MemberShipUserCollection遍历然后逐一去读取公司名,然后再组成一个DataTable再绑定?
3、现在的会员搜索方式有限,比如只有GetUserNameByEmail(),GetUser(),GetAllUsers()等几个方法,如果我要根据其它字段去搜索,比如公司名,联系人等。如何去拓展?
其实,我觉得可以自己设计新的MemberShipProvider,然后还得重新设计MemberShipUser等,以及设计新表.和新的存储过程.
但是按照这样的量下来,扩展MemberShip和设计自己的Member系统工作量没什么节俭了。
希望在asp.net3.0里能更灵活一些
从asp.net1.1到asp.net2.0我们能看到微软的进步,尽管还是有很多的缺点
也觉得,好用,但实际应用起来就不是那么回事了。现在还不知道如何扩展。小弟建立了一个群,讨论ASP.NET2.0开发的,刚建,希望各位高手加入。群号:22270101
@ 风吹河岸柳轻扬
请告诉我们群号啊
@路人
确实,感觉就象是过度一样
membership是做什么的,DOTNETNUKE数据库里面也有两个表aspnet_Membership表跟aspnet_Profile表,不过我不知道他们是做什么用的,有哪位可以解释一下,不过不要说我菜就行了,我会不好意思的.
@娇龙
没错,那个就是membership和profile,也就是asp.net2.0新特性里所要的表,里面的结构是不能动的,除非对.net2.0的那个框架特别的了解可以重写
@我是阿呆
快了吧,我想是的,呵呵,c#3.0不是也有人在讨论么
@子扬's Blog
其实最关键的是对membership里面的实现方法了解多少,然后才能做出相应的扩展,就象webcast里说的,表里很多东西都设计到某个存储过程,如果改的话,后果很难预测
3、现在的会员搜索方式有限,比如只有GetUserNameByEmail(),GetUser(),GetAllUsers()等几个方法,如果我要根据其它字段去搜索,比如公司名,联系人等。如何去拓展?
这里说了一些实现的方法。
http://www.microsoft.com/china/msdn/library/webservices/asp.net/ASP2memroleman.mspx?mfr=true
去这里下载些原码研究研究吧。
http://peterkellner.net/
这些东西对初学者非常好,对我们用熟1.1的我觉得是个灾难。
我对1.1下的Web/Win Form很熟了,但是现在转到2.0下的一个WinForm项目,除了按钮/label之类的控件外,几乎是新的,尤其是WinForm下的数据访问,与1.1一点也不同了,DataGrid也没有了,DataGridView操作与DataGrid看起来相同,实际上细微的地方完全不同。我正在发愁呢。
最简单的权限管理一般会涉及用户users、角色roles、规则rules(就是当前系统各个功能与角色的对应关系),请教:rules部分 membership中实现了没有?
@生活、工作
这个我还不大确定,但是,如果你在webconfig里把membership的provider配置成sqlserver2000的话(比如说),那么受到影响的将是这些表
@笑望人生
CS下的还不大了解,听组里的人说变化不大
真得要评价membership得优劣得化,先去看看.net petshop2.0 或许有新的收获
换一个注册ID回复一下。
楼主的想法可能有些偏激。虽然我也有与楼主有相似的情况,但我觉得,往往新的东西难以被接受,需要我们花更多的精力去熟悉与研究。 但这并不代表新的东西一定不好。做相应扩展的难易程序,在于你对它的了解程序。 这是一个相对的感觉。不能用来评价新生事物的好坏。
我就把user表给改了,没见什么异常,而且存储过程也在那摆着,可以看见,M$写得也有问题,比如创建新用户的存储过程创建日期设的是1954年,我觉得都可以自己改。
关于修改user还是用profile我也很想弄明白。
最恶心的就是那个WEB PART,不用他的MEMBER就甭想用那东西,郁闷。。。
我和你的情况比较类似,不过建议你不要采用改的办法,而是增加新的数据表以及继承的处理类来实现。如果非改不可的话,那就用楼上的XD建议的自己作Provider。
请问楼主,如何实现将membership或者profile的那一套数据表导入到Oracle数据库?
自带的那个reg_sql好象只能用于sql server。
@锦瑟
不要想倒入 想着怎样写一套实现吧
估计不久就会有好事的人写一套 ORACLE PROVIDER 的
@锦瑟
oracle已经有了,我记得那次在哪个网站上看到过,包括连access的都有
@韦恩卑鄙
已经有了。
写一套来实现是不大可能的,因为还有很多的存储过程,弄起来是非常的麻烦的
再说微软好象没有公布如何自写这样的库的资料,要不然也不会有这个文章的存在了
@jingo
同意此观点,继承下来确实可以对其做个很好的补充。
我之前曾想过把membership的表和项目现有的表做个映射。
那些provider已经开源了,特回到自己的老贴留念一下
这个membership用起来真的是很麻烦啊。
给微软的讲师发了封邮件请教login控件的问题,他说很麻烦。真晕啊。
只是想用它的控件在自己的表里验证一下,有那么麻烦吗?欢迎朋友指教,不盛感激
这个membership用起来真的是很麻烦啊。
给微软的讲师发了封邮件请教login控件的问题,他说很麻烦。真晕啊。
只是想用它的控件在自己的表里验证一下,有那么麻烦吗?欢迎朋友指教,不盛感激
@无可奈何
只是想用它的控件在自己的表里验证一下
就目前来说,你只能根据微软发布的接口来根据自己的库来实现了,是很麻烦
re: membership,想说爱你不容易 2006-03-23 12:28 jingo 回复
我和你的情况比较类似,不过建议你不要采用改的办法,而是增加新的数据表以及继承的处理类来实现。如果非改不可的话,那就用楼上的XD建议的自己作Provider。
能否能具体说明一下,用自己的登陆验证,不用membership怎样使用webpart,刚接触net,很菜,比如如何增加新的数据表以及如何实现继承的处理类
我觉得最笨的方法,就是在你的表中和membership的表中的记录建立一个映射
类似orm的思想来解释这种方法似乎有点勉强
不过我分析是个可行的方案
get a copy of petshop 4.0 from msdn.microsoft.com,it's use .net 2.0 membershop
@ww[匿名]
yap
and it deploy asp.net2.0 default providers to a database,nothing special
核心是需要扩展MembershipProvider及 membershipuser
如果只扩展MembershipProvider相当于换个数据源,
如果再扩展membershipuser就可以修改界面了
@陈埃
多谢指点
最近看过kaneboy上的自定义moss2007的membership才有所领悟
@heqing
呵呵,正所谓看似无形,实则有形啊,呵呵@heqing