从客户端调用WCF DataService[WebGet]函数

从客户端调用WCF DataService[WebGet]函数,wcf,entity-framework,stored-procedures,odata,Wcf,Entity Framework,Stored Procedures,Odata,我有一个带有存储过程的EF4模型,我想从客户端调用它。 服务器代码如下所示: [WebGet] public IQueryable<SalesData> GetSalesReport(int reportType, int yr, int m, int d) { DateTime dt = new DateTime(yr, m, d); return this.CurrentDataSource.RP_SalesReport(reportType, d

我有一个带有存储过程的EF4模型,我想从客户端调用它。 服务器代码如下所示:

[WebGet]        
public IQueryable<SalesData> GetSalesReport(int reportType, int yr, int m, int d)
{
    DateTime dt = new DateTime(yr, m, d);
    return this.CurrentDataSource.RP_SalesReport(reportType, dt, dt).AsQueryable<SalesData>();
}
当使用IE使用URL调用此http://localhost:12345/MyService.svc/GetSalesReport?reportType=1&yr=2009&m=4&d=2 它按预期工作

在我的客户端应用程序中,我添加了对服务的引用http://localhost:12345/MyService.svc 无论我尝试什么时候,GetSalesReport函数都不会显示在对象浏览器中。 普通EF图元确实显示在对象浏览器中

所以我的问题是:如何从客户端调用这个函数


根据我想从Windows Phone 7 Silverlight应用程序调用此函数的客户端,在如何调用此函数方面是否存在差异,但现在我正在使用WPF测试客户端进行测试。

实际上,ADO.NET数据团队似乎没有实现从客户端调用ServiceMethod的CodeGen

因此,我的问题的解决方法是在客户端编写以下代码:

        // execute the service operation
        Uri u = new Uri(string.Format("{0}/GetSalesReport?reportType={1}&yr={2}&m={3}&d={4}", 
                      context.BaseUri, 1, 2009, 4, 2),UriKind.RelativeOrAbsolute);

        var datas = context.Execute<SalesData>(u);

感谢Gil Fink写了这篇博文:

您在ServiceContract中有哪些与此方法相关联的属性?这是一个ADO.NET数据服务代码名Astoria,我唯一拥有的属性是[WebGet]。据我所知,您无法在ADO.NET数据服务上添加[ServiceContract]。是否检查了生成的代码?您应该有一个包含生成实体的大型文件。它有GetSalesReport的条目吗?它看起来如何?在IE中查看metdadata时,使用函数显示的URL。元数据:这种情况可能会导致其他问题:当前OData生成的代理不支持复杂类型,只支持实体类型。这意味着,如果SalesData在CSDL中定义为复杂类型ComplexType元素,OData生成的响应将不会格式化为提要。解决方法是将复杂类型定义为实体,这可能需要定义假表。