.Net 中用C/S模式来开发(分不在多,有解则灵!)现打算实现类似如下的功能:请一定要接着往下看哦~~
服务器端拥有全部的功能如功能A(打印)、功能B(截图)、...
服务器端可以决定客户端可以使用的功能,打个比方:
第一天,服务器端说:“客户端A,你表现不错,我允许你使用打印这个功能”。那么客户端A就具有了打印功能;第二天,服务器端又说:“客户端A,这一阵子,你帮助了很多要打印的人的忙,为了鼓励你,现在允许你也可以使用截图功能”。那么客户端A就具有了这两个功能。第三天,服务器端生气了,“客户端A,你太不像话了,让你截图,你居然截一些YY的图片,现在取消你截图的功能”。那么客户端A现在又只有一个打印功能了。不知道,这个比方,大家有没有看明白?我的意思就是:服务器端可以指派权限给客户端,客户端只有在拥有了这个权限后,才能执行相关事件。快看完了,坚持住~~类似于这种功能,大家有没有碰到过?该怎么实现才能在性能上,效果上都能比较良好?我现在头绪比较乱,想到一个是:
用一个数据库来存放各个客户端所具有的权限代号。
客户端程序中拥有执行所有功能的模块,这些功能代码已经写死在程序里。然后在每个调用前加上查找,即在数据库中取出来的用户的权限代号集合中查找该功能代号,如果有,则允许执行。否则不执行。可是这样做,第一感觉,客户端过于臃肿,因为有些功能是不能实现的。第二、每次都要查找数据库,太耗费性能。不管能不能解答,您都花费了时间在阅读我这个问题上,因此真诚地表示感谢~~

解决方案 »

  1.   

    有点类似Web服务啊,
    SOA
    :)
      

  2.   

    做成WebService,客户端通过WebService来调用相关打印或者取图等,这样服务器端验证等,全部就好做了
      

  3.   

    我觉得第一个办法好。
    既然是WS控制。那肯定是主动访问服务。 那就不需要数据库了吧。每次运行从WS加载一次权限就可以了。
    PS:楼主写帖真有意思
      

  4.   

    看完了,C/S 是啥?PS: 
    我的目标是 ----> ^_^
      

  5.   

    所谓的权限,对客户端来说只是一堆bool变量而已每次登陆,服务器给客户端返回这么一组权限值就行了
      

  6.   

    我基本上是同意3楼的意见,你把问题搞得太花俏了,实际上就是权限控制不过,因为你用的是.NET平台,你应该庆幸微软给你提供了几个层次的封装,让你可以实现SOA的解决方案最初级的层次,你可以将一些东西封装起来,比如说打印,你可以将打印内容放在服务器端,客户端通过web service来获得要打印的内容,然后再打印如果web service封装你不满意(因为web service只能传输可序列化的对象),你可以用Remoting,几乎所有对象都可通过Remoting来传输,从服务器端获得对象,然后运行该对象的功能如果上面的封装你不满意,最后就是终极方案了。c#拥有动态编译功能,你可以将模块的代码写好放服务器上,然后客户端下载这些代码,在客户端动态编译,然后执行。。你可以搜索Emit来了解更多细节
      

  7.   

    这个你需要使用到远程组件调用,
    服务器上有 Printer.dll,IPrinter.dll,PrtSC.dll,IPrtSC.dll ......这些组件,加上一个服务器宿主
    客户端上有 IPrinter.dll,IPrtSC.dll......这些组件,加上客户端程序客户端和服务器推荐使用Remoting或者现在的WCF(这个我暂且不清楚)通信,获取客户端相应的权限,可以是存在数据库中的,有了权限就可以进行相应的组件调用了,也就可以实现相应的功能......
      

  8.   

    LZ这个好像有点乱了,你的客户端指派是根据什么来的?是人为操作还是系统自动执行?
    如果是人为操作的话就是一个权限问题了,你可以在直接设置用户可以访问哪些模块
    把所有模块做成一个Tree,可以访问的打一个勾.不想让他访问就把勾去掉好了.
    你的一句“客户端可以给服务端指派权限”,听得好悬,呵呵
    本来客户端读取模块和数据就是从服务端来的,所以只要把权限去掉,自然没有了
    没有你想的那么复杂
      

  9.   

    现在微软已经不推remoting了
    现在微软推出了wcf,可以传二进制,也可以是文本,基本上把微软以前的几种通讯的东西,包括asp.net webservice,remoting,wse等全部整合在一起了
    如果lz选型客户端到服务器端的通讯组件,推荐wcf给你。
      

  10.   

    就是权限的问题,这些权限是人为指定的,
    比如管理员可以在服务器上选择客户端A能够执行哪些功能。
    这些功能都只是在客户端执行,不是到服务器上执行。可是怎么处理这个权限模块好呢?我是做成winform的。用webservices?
    如果按照某些朋友说布尔值,或tree什么的,那就是说,客户端已经拥有所有功能模块喽,然后根据权限来选择哪个可以执行或不可以执行。这样客户端不是很累赘
      

  11.   

    我执行的功能比如截图等,截的肯定是本机的图片,是不需要服务器参与的,也就是说不需要从服务器获取数据。这样的话,用webservice是不是不太好呀?QQ是这样的吗?那执行相应权限的功能代码是全部都先写在客户端程序里,还是需要了再从服务器端取?
      

  12.   

    我认为应该放到服务器上去控制权限,
    客户端只是传递参数过去,服务器端返回权限列表。
    客户端根据权限列表再去服务器上下载相应的模块和功能(应该只有一次,先到本地去比对,没有再去下载)。
    采用provider的模式可以实现这个设计。
      

  13.   

    你确定?Indigo就会替代Remoting? 那DCom呢?remoting可以很好的解决序列化和传输协议上面的问题......
      

  14.   


    原来这个是provider模式呀,不是很懂,先去了解下。不过对你所采用的方法,挺感兴趣
      

  15.   

    wcf的tcpip协议也是二进制编码的,而且它封装了很好的缓存机制,会对二进制流进行预处理,对相同的数据块会合并掉,减少传输的量。
    netramework是不建议用com之类的东西,这个在它出现的第一天就有了定调了
    remoting只适合netframework平台,而且很难调试,并且无法跨网通讯,没发现微软对remoting的支持不是很多吗?
      

  16.   

    就我了解的情况,微软现在在中国做的企业项目,就银行行业,还没看到用remoting的
      

  17.   

    B/S架构的,好不好实现,本人不太懂
    我是做C/S架构的,天天在跟这个功能打交道基本原理是,在数据库建立一个用户权限数据库,保存各个用户的权限。
    然后在用户登录时,系统从数据库中查找用户具用的权限,能调用哪些功能系统的管理员可以为用户配置不同的权限。
      

  18.   

    现在打算采用抽象工厂模式来实现,大家觉得如何?设置一个抽象权限功能类,并且每个具体的权限功能都继承自此类。由具体的工厂类来调用这些具体的权限功能类。而这些工厂则继承自抽象工厂。由抽象工厂通过反射从配置文件中获取功能权限名,从而实例化工厂类。以此来调用权限。也就是类似20楼的方法,服务器设置用户客户端可以使用的权限,然后用户登陆时,从服务器数据库上获取拥有的权限代号,如果本机没有该代号的功能模块,则通过socket或其它方式,请求下载模块程序集,下载到本机后,就可以利用抽象工厂模式来调用了。