首页 新闻 会员 周边

Asp.net中WebService 如何根据数据库中的数据控制接口的公开与否?

0
悬赏园豆:50 [已解决问题] 解决于 2013-12-21 21:43

我的思路是这样的:
1、需要找一个访问Webservice的统一入口,就像asp.net中的handler中的一个事件,就是每次访问这个webservice都会进入这个事件中。
2、需要获得访问Webservice的接口名称,这样就可以与数据库中存储的接口名称相比较,可以获得这个接口是否公开,然后根据是否公开进行下一步处理。

但是经过一番百度、谷歌未果,也问了同事,没有听说过这种方法,不知道这个方案可行不,或者有没有其他可替代的方案,希望做过这种需求的同学们给予帮助,在此感激不尽!

灬达的主页 灬达 | 初学一级 | 园豆:157
提问于:2013-12-19 21:29
< >
分享
最佳答案
0

简单的很,因为 Web Service 的框架跟 Asp.Net MVC 的一样,任何请求都会先经过类似 Handler 的一个接口,然后根据传入消息的 SOAP Action 去找到适配的方法调用。当然,实际上,针对授权,WCF 可以让你很容易的定制。Asp.Net Web Service 请看这里:http://msdn.microsoft.com/en-us/library/ff648643.aspx

其实,方法还有很多,只是,下次你提问前,你先说清楚,你的 Web Service 用什么框架实现的。

收获园豆:40
Launcher | 高人七级 |园豆:45045 | 2013-12-20 09:46

好的 谢谢提醒  刚接触Webservice  我以为只有.net 叫Webservice的  其他的有另外的名字  我想起来  这个webservice本来就是建立在asp.net 项目中的  应该跟webform一样的道理  但是那个soap action 要怎么获取到呢?这几天查的资料,我知道可以用url截取最后的字符串获取方法名

灬达 | 园豆:157 (初学一级) | 2013-12-20 15:16

@灬达: 你先学习下:http://www.iwms.net/n405c12.aspx

另外,你对 Asp.Net 认证和授权熟悉吗?

最后,你先告诉我“进行下一步处理”,你的下一步处理到底如何处理?也就是说如果不公开的话,你希望服务干什么?

Launcher | 园豆:45045 (高人七级) | 2013-12-20 15:23

@Launcher: 嗯 谢谢   这方面基础挺差的 的补一下  进一步处理  是指 获得方法名后 查询 后台管理系统的数据库   如果在数据库中这个接口被关闭  就不让他访问这个接口  如果公开  就可以访问  这样就可以动态的管理这些接口了  

灬达 | 园豆:157 (初学一级) | 2013-12-20 15:28

@灬达: 不让他访问是如何体现给客户端的?

Launcher | 园豆:45045 (高人七级) | 2013-12-20 15:43

@Launcher: 就是一个字段“状态”的值,如果是1就公开,如果是0就是不公开,数据库是这样存的,然后有页面对接口的相关信息进行管理

灬达 | 园豆:157 (初学一级) | 2013-12-20 15:46

@灬达: 其实我想要的结果是,如果不公开,服务返回 http status code 401 或 403。看来你也说不清楚,那你只能自己看这里了:http://msdn.microsoft.com/zh-cn/library/vstudio/9z52by6a(v=vs.100).aspx,通过自定义 IHttpMoudle 可以在调用 WebMethod 之前就拿到 Request,然后根据 Request 的 RequestUri(GET)或 Headers(POST)来得到客户端请求的 WebMethod 名称。

Launcher | 园豆:45045 (高人七级) | 2013-12-20 16:04

@Launcher: 嗯  是我想要的答案  谢谢你了

灬达 | 园豆:157 (初学一级) | 2013-12-20 17:07
其他回答(2)
0

感觉你这个思路就和我们控制用户的权限一样,开了这个权限用户就能访问到具体的信息。

其实应该可以写一个CommonServices,大家共同继承他吧,如果用户请求的这个页面开放,就进入需要操作的webservice接口。

收获园豆:5
雾静 | 园豆:561 (小虾三级) | 2013-12-19 22:26

嗯   我理解   但是我要控制 这个服务中的每个方法的公开与否    如果是继承的话  怎么实现控制每个方法的访问?

支持(0) 反对(0) 灬达 | 园豆:157 (初学一级) | 2013-12-20 09:32

@灬达:你的提问不是说只是公开接口么,怎么又是接口的方法了。这个也好办啊,几类return true 和false,如果是true,进入方法,如果不是,直接返回null

支持(0) 反对(0) 雾静 | 园豆:561 (小虾三级) | 2013-12-20 10:02

@雾静: 不好意思  怪我描述不清楚  我说的接口就是指服务中的公开的方法名,可能对接口理解的不是很好,我所有的方法都写在asmx.cs这个类中  没有其他的类  我就是为了控制访问的方法  可能不需要继承了吧

支持(0) 反对(0) 灬达 | 园豆:157 (初学一级) | 2013-12-20 15:19
0

同意楼上,你很难动态的去发布一个web service接口给不同的人群。所以实际的办法就是在执行web service的时候去判断,如果有权限,就执行,没权限,就返回错误。而这个通用的东西放在一个基类里面比较恰当。

收获园豆:5
ocean | 园豆:824 (小虾三级) | 2013-12-20 08:58

但是这样也控制不了每个方法的访问啊,要怎么实现继承呢?  

支持(0) 反对(0) 灬达 | 园豆:157 (初学一级) | 2013-12-20 09:33
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册