Сбой операции службы данных с параметрами, вызываемыми из клиентской библиотеки.

Подобный вопрос уже задавался здесь:

Работа службы ADO.Net Services с параметрами вызывается из клиентской библиотеки не работает

Полное описание проблемы, как у меня сейчас. Единственное отличие - это то, что я правильно передаю все параметры.

У меня есть этот метод операции, определенный в службе данных:

[WebGet]
    public IQueryable<Equipment> GetCompanyEquips(int id)
    {
        return this.CurrentDataSource.GetCompanyEquips(id);
    }

И я могу без проблем получить результат в своем веб-браузере:

http://localhost:51685/ITSServiceOData.svc/GetCompanyEquips?id=18

Но когда я пытаюсь получить на своем клиенте такой результат:

 var r = this.CreateQuery<Equipment>("GetCompanyEquips");

            r.AddQueryOption("id", CompanyId);

            r.ToArray();

У меня есть следующее исключение:

«Произошла ошибка при обработке этого запроса».

Также я вижу в отладчике, что r.Query = "{http://localhost:51685/ITSServiceOData.svc/GetCompanyEquips} ", и я подозреваю, что здесь что-то не так, потому что я не вижу здесь? Id = 18 в конце.

Также, когда я вызываю такой метод:

this.Execute ("http://localhost:51685/ITSServiceOData.svc/GetCompanyEquips?id=18 ") - return содержит пустое перечисление (хотя в этом случае исключение не возникает), но когда я вызываю ту же строку запроса в браузере, он показывает ожидаемый результат.

Также, когда я вызываю аналогичным образом метод, у которого нет никаких параметров, все работает нормально. Пожалуйста помоги! Я потратил целый день на эту проблему, ища в Интернете, пытаясь решить проблему, но не нашел ничего плохого в моем коде!

Спасибо.


person baio    schedule 16.03.2011    source источник


Ответы (1)


Метод AddQueryOption возвращает новый экземпляр IQueryable. Итак, вам нужно изменить свой код, чтобы:

r = r.AddQueryOption("id", CompanyId);

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

person Vitek Karas MSFT    schedule 16.03.2011
comment
Спасибо, это работа. Остается ли здесь работа, чтобы вернуть не сложный тип сущности с помощью таких операций, или единственный способ здесь - создать другую службу данных? - person baio; 17.03.2011
comment
Я не понимаю второго вопроса. Клиентская библиотека просто не поддерживает синтаксический анализ ответов от операций службы, возвращающих примитивные или сложные типы (или их перечисления). Обходной путь состоит в том, чтобы либо вернуть типы сущностей из операции службы (иногда это возможно, иногда это довольно сложно), либо самостоятельно проанализировать такой ответ (с форматом XML довольно легко справиться). - person Vitek Karas MSFT; 17.03.2011