Потребление услуг операций службы данных ADO.NET от клиента .NET

StackOverflow https://stackoverflow.com/questions/1559302

Вопрос

Я пытаюсь построить службу данных ADO.NET с множеством организаций и несколькими операциями по обслуживанию. С одной стороны, я создал веб -приложение ASP.NET, в котором расположены модель данных объекта ADO.NET и служба данных ADO.NET. С другой стороны, я создал второе веб -приложение ASP.NET, которое имеет ссылку на службу на службу данных.

Организации очень хорошо проходят, я могу использовать LINQ, чтобы получить нужные данные:

TestEntities entities = new TestEntities(
            new Uri("http://localhost/service/service.svc"));

var query = from customer in entities.Customers
                    where customer.ID == 1234
                    select customer;

query.ToList();

Это работает. Тем не менее, получение информации через операции по обслуживанию полностью ускользает от меня. Код на стороне службы данных:

public static void InitializeService(IDataServiceConfiguration config) {
    config.SetEntitySetAccessRule("*", EntitySetRights.All);
    config.SetServiceOperationAccessRule("*", ServiceOperationRights.All);
}

[WebInvoke]
public IQueryable<Customer> GetSomeCustomers() {
    TestEntities entities = new TestEntities();
    return from customer in entities.Customers
        where customer.ID > 0 && customer.ID < 20
        select customer;
}

Когда я добавил ссылку на службу в свой клиент -проект, Visual Studio не приобрела никаких операций по обслуживанию. Я знаю, что могу получить к ним доступ через построенную URI и метод Betinexecute либо объекта DataServiceContext, либо объекта Testentities (в данном случае), либо что -то в этом роде, но это не то, как я этого хочу.

Я хочу использовать LINQ, чтобы пройти возвращенные данные операции службы. Это возможно? Это должно быть, верно?

Это было полезно?

Решение

Простые вещи, как только вы знаете.

Просто несколько вещей, которые нужно знать:

В настоящее время DataServiceClientGenerator (который использует EntityClassGenerator) не создает методы для операций обслуживания.

Использование метода CreateQuery в контексте не поддерживается для операций обслуживания, в настоящее время они работают, потому что на стороне клиента нет никакой проверки. как это "http: //localhost/service.svc/method ()? Parameter = 2«Вы можете использовать CreateQuery, но это не рекомендуется.

Не все операции обслуживания возвращают значения, но для этого примера я покажу только пример для тех, которые делают.

public partial class NorthwindEntities
{ 
    public IQueryable<Order> OrdersByRegion(int regionId)
    {
     return this.Execute<Orders>(new Uri(string.Format("{0}OrdersByCountry?regionId={1}", this.BaseUri, regionId), UriKind.RelativeOrAbsolute));
    }
}

Если вам нужна дополнительная информация, пожалуйста, не стесняйтесь задавать какие -либо вопросы.

PS.: В вашем примере вам не нужно создавать новый контекст данных на вашей операции службы (сторона сервера), набор данных уже имеет справочный экземпляр при вызове службы.

Вы можете фактически переопределить создание контекста данных на стороне службы, как это:

protected override NorthwindEntities CreateDataSource()
{
     return new NorthwindEntities();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top