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

时间:2011-01-11 15:07:06

标签: 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, dt, dt).AsQueryable<SalesData>();
}

使用网址“http:// localhost:12345 / MyService.svc / GetSalesReport?reportType = 1&amp; yr = 2009&amp; m = 4&amp; d = 2”使用IE调用时,它按预期工作。

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

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

如何根据客户端调用此函数有什么不同(我想从Windows Phone 7 Silverlight应用程序中调用此函数,但现在我正在使用WPF测试客户端进行测试)。

1 个答案:

答案 0 :(得分:5)

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

所以解决我的问题就是在客户端编写这段代码:

        // 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写了这篇博文:http://blogs.microsoft.co.il/blogs/gilf/archive/2008/11/14/consuming-data-services-service-operations.aspx