2011-01-11 89 views
2

我有一个EF4模型,其中包含要从客户端调用的存储过程。 服务器代码看起来是这样的:从客户端调用WCF DataService [WebGet]功能

[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>(); 
} 

当使用URL“HTTP调用此使用IE://本地主机:12345/MyService.svc/GetSalesReport REPORTTYPE = 1 &年= 2009 & m = 4的& d = 2“它按预期工作。

在我的客户端应用程序中,我添加了对服务(http:// localhost:12345/MyService.svc)的引用,并且无论我尝试过什么,函数“GetSalesReport”都不会显示在对象浏览器中。 (正常EF实体确实出现在对象浏览器中)

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

是否有区别如何根据客户端调用此函数(我想从Windows Phone 7 Silverlight应用程序调用此功能,但现在我正在使用WPF测试客户端进行测试)。

+0

什么属性,你已经用这种方法在相关ServiceContract? – 2011-01-12 02:21:59

+0

这是一个ADO.NET数据服务(代号“Astoria”),我唯一的属性是[WebGet]。据我所知,你不能在ADO.NET数据服务上添加[ServiceContract]。 – Ronny 2011-01-12 08:36:44

回答

5

实际上它看起来像ADO.NET DataTeam没有实现从客户端调用ServiceMethod的CodeGen。

所以soloution我的问题是在客户端写这个代码:

 // 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); 

感谢吉尔芬克说写这篇博客文章:http://blogs.microsoft.co.il/blogs/gilf/archive/2008/11/14/consuming-data-services-service-operations.aspx