使用SQL查询Web服务

chi*_*oro 5 c# sql linq web-services

最近我考虑将面向服务的架构与一个优秀的用户界面结合起来时感到有点震惊,该用户界面利用SQL来优化查询数据时的性能.

例如,ASP.NET的DevExpress网格视图非常酷,它将所有过滤,排序和分页逻辑委托给数据库服务器.但这假定数据从一个支持SQL的数据库服务器中检索的.

如果我想在数据库和UI层之间引入Web服务层,并让UI使用Web服务来查询数据,该怎么办?

  • 如何设计Web服务和UI,以便我可以通过Web服务将UI中的过滤请求传递到数据库?
  • 我是否需要提供List QueryData(string sqlQuery)样式Web服务并且必须自己解析SQL字符串以保证安全性/访问限制?
  • 或者是否有任何好的框架或设计指南可以减轻我的负担?

这一定是一个非常普遍的问题,我相信它已经相对充分地解决了,是吗?

我主要对基于.NET/C#或兼容的解决方案感兴趣.

编辑:我发现了OData和Microsoft WCF数据服务.如果我做对了,基于OData的应用程序可能如下所示:

  1. 用户 --- /给我第1页(记录1..10)/ ---> ASP.NET服务器控件(当然,通过HTTP)
  2. ASP.NET服务器控件 ---/LINQ查询/ ---> 数据服务客户端
  3. 数据服务客户端 ---/OData Query/---> WCF数据服务
  4. WCF数据服务 ---/LINQ查询/ ---> 实体框架
  5. 实体框架 ---/SQL查询/ ---> 数据库

如果我得到这个权利,我的DevExpress服务器控件应该可以委托一个过滤请求(例如给我的只有排名前10位)通过所有这些层向下,然后运用其索引等,以执行该查询数据库.

是对的吗?

编辑:很高兴看到这个帖子变得生动:-)很难确定接受什么答案,因为对我来说似乎一切都很好......

Cha*_*ham 1

实施它List QueryData(string sqlQuery)将使您面临近乎无限数量的安全问题。

如果您需要基于安全访问进行过滤,那么 OData 实现也将非常重要,您需要在 WCF 服务上设置适当的授权/身份验证,以便您可以根据经过身份验证的用户数据进一步过滤 OData 查询。

从 WCF 服务检索数据时实现服务器端数据操作的最简单方法是在后面的代码中拦截 Grid 的排序/过滤操作,然后根据用户正在执行的操作调用 WCF 服务上的专用方法。