使用WCF的IQueryable问题

我有一个非常简单的WCF服务方法,它返回一个IQueryable,仅用于测试。 也许我在试图了解IQueryable的设计时遇到了什么问题。 我明确计划稍后将其与NHibernate的IQueryable提供程序一起使用。 但是,每当使用返回IQueryable的WCF方法时,我首先遇到某种序列化问题(至少我认为这可能是问题)。 它甚至不适用于简单的字符串。

这是我的代码:

public IQueryable GetEquipmentConfigurations() { var returnValue = new List(); returnValue.Add("test"); return returnValue.AsQueryable(); } 

它可能没什么意义,只是为了测试我是否真的使用WCF通过线路获得那些IQueryables。 每当我使用类似SoapUI的客户端调用此方法时,我会收到套接字exception和连接重置,就像我尝试返回未标记为DataContract的内容一样。 但我在这里唯一要做的就是尝试返回一些糟糕的字符串列表。 这有什么问题?

我使用basicHTTPBinding,这是我的设置:

                      

为接口设置OperationContract属性:

 [OperationContract] IQueryable GetEquipmentConfigurations(); 

只返回一个简单的字符串就可以了。 无论如何,我想稍后使用LINQ从IQueryablefunction中获利。

有谁知道这里出了什么问题?

谢谢和干杯,

斯特凡

(已过时) AFAIK开箱即可序列化IQueryable <>或表达式树(想想它 – 这意味着需要序列化表达式树/ lambda并重建函数)

但是,如果有遗嘱,似乎有办法 – 你可能想看一下像这样的项目http://code.msdn.microsoft.com/exprserialization

编辑 :请注意,时间已经改变 – 请参阅Marc Gravell的post中的WCF RIA服务。

祝好运!

HTH

核心WCF旨在发送数据 ,而不是查询。 坚持返回List等; 它会让你头疼。

但是,使用WCF数据服务 IQueryable<>更多运气,这可以让您公开IQueryable<>源。

这种方法的工作方式是工具构建一个客户端,公开类似的 IQueryable<>钩子; 当您查询数据时,它表示线上的表达式,查询数据并将其带回客户端。 但它仍然是通过电线的结果 (而不是查询)。