Вызов функции WCF DataService [WebGet] из клиента - PullRequest
2 голосов
/ 11 января 2011

У меня есть модель 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).

1 Ответ

5 голосов
/ 12 января 2011

На самом деле похоже, что в 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);

Спасибо Гилу Финку, написавшему это сообщение в блоге: http://blogs.microsoft.co.il/blogs/gilf/archive/2008/11/14/consuming-data-services-service-operations.aspx

...