表达式跨服务器执行技术研究情况

要在业务层编写一个 Linq查询(或者说表达式树)对象,然后序列化,以HTTP Get的方式发送到 WebAPI 的服务器上执行,因此需要将 Linq 对象进行序列化和反序列化,昨天的实验结果是如果直接对Linq 对象进行序列化,反序列化会遇到问题,因此今天尝试其它的数据传输方式,方案有2种:

1,以特定的查询DTO 方式传输查询请求 这涉及到2个步骤:

1.1,将 Linq 对象序列化到DTO对象的问题,这个必须定制,解析Linq表达式,构造DTO对象;

1.2,将DTO对象在解析成Linq 对象。

这2个步骤都没有现成的解决方案,难度很大。

 

2,以业界开放的数据查询协议 OData 方式传输查询请求

OData是业界新兴起的一个标准,在Asp.Net WebAPI和 WCF DataService中均可以提供支持,该方案也分为2个步骤:

2.1,将Linq对象序列化成OData请求的URL;

2.2,将OData URL请求提交至 WebAPI OData;

经过试验,在 ASP.NET MVC5 WebAPI OData 提供了支持,2.2 可以实现,但是2.1步骤难以实现,和其他朋友交流后得知,有一个linqtoquerystring 的项目可能提供支持(http://linqtoquerystring.net/): Linq to Querystring is an expression parser for .NET that aims to provide a lightweight subset of the OData URI Specification. We focus only on the query aspect of the specification which is one of the most useful and flexible elements of OData.

下载了该项目源码进行研究,目前还没有研究明白具体如何使用,以及它支持的OData版本(目前最新的是OData V4)

有关OData的应用文章:

http://www.it165.net/pro/html/201306/6106.html 让Web API支持OData查询

http://www.tuicool.com/articles/BjMF32  ASP.NET WebApi 开放数据

-------------------------------------

总结: 目前这种跨服务器的Linq查询有一定难度,建议根据应用需求使用常规的方法来解决,在WebAPI服务器上提供方法进行定制查询,或者在整个查询层,使用其它数据框架.

 

 

posted on 2014-05-30 17:31  深蓝医生  阅读(271)  评论(0)    收藏  举报

导航