当考虑将面向服务的体系结构与利用SQL在查询数据时优化性能的优秀UI结合使用时,我感到有些震惊。用SQL查询Web服务
例如,ASP.NET的DevExpress网格视图非常酷,它将所有过滤,排序和分页逻辑委托给数据库服务器。但是,这假定从具有SQL能力的数据库服务器检索到的数据是。
如果我想在数据库和UI层之间引入Web服务层,并让UI使用Web服务来查询数据,该怎么办?
- 如何设计Web服务和UI,以便我可以通过Web服务将过滤请求从UI传递到数据库?
- 我是否需要提供
List QueryData(string sqlQuery)
样式的Web服务,并且必须自行解析SQL字符串以确保安全/访问限制? - 或者有没有什么好的框架或设计指导方针来承担我的这个负担?
这一定是一个非常普遍的问题,我相信它已经解决得比较充分了,对吗?
我主要感兴趣的是基于.NET/C#的或兼容的解决方案。
编辑:我找到了OData和Microsoft WCF Data Services。如果我是正确的,基于OData的应用程序可以看看如下:
- 用户 --- /给我1(记录1..10)/ --->ASP.NET服务器控制(当然,经由HTTP)
- ASP.NET服务器控制 ---/LINQ查询/ --->数据服务客户端
- 数据服务客户端 ---/OData的查询/ --->WCF数据服务
- WCF数据服务 ---/LINQ查询/ --->实体框架
- 实体框架 ---/SQL查询/ --->数据库
如果我有这个权利,我的DevExpress服务器控件应该能够委托一个过滤请求(例如只给我前10名)通过所有这些层到数据库,然后使用它的索引等来执行该查询。
是吗?
编辑︰看到这个线程来生活是一种喜悦:-)很难决定接受什么答案,因为所有对我来说似乎同样好......
你确定你不是“只是”需要实现IQueryable并使web服务调用到后端?不熟悉组件... – 2011-03-29 07:03:06
不错的问题,我一直在努力,但从来没有想出一个优雅的解决方案。在之前的实现中,我提供了一个自定义的“过滤器”参数给我的服务方法(最终被解析为WHERE子句),然后在服务中添加了一些额外的标准以确保访问限制。编辑:在这种情况下,我与Telerik Grid一起工作,它生成过滤器作为OQL查询 – Ozzy 2011-03-29 07:23:34
@Vincent:实现IQueryable可能是故事的一部分,但小事一桩:它允许在表示层上使用LINQ,但它没有解决(?)如何将过滤和排序委托给DBMS的问题。 – chiccodoro 2011-03-29 15:03:57