Ria Services Передача сложного объекта в качестве параметра методу службы домена запроса - PullRequest
12 голосов
/ 19 августа 2010

Я испытываю некоторые трудности со службами RIA WCF, аналогичные проблеме, указанной в этой теме .

Метод создаваемой мной службы домена (метод Query) должен занятьпараметр сложного объекта.пример метода domainservice:

public ComplexObjectResult GetComplexObject(ComplexObjectParameter test)
   {
        //do stuff
   }

объект параметра:

public class ComplexObjectParameter 
{        

    [Key]
    public decimal ID { get; set; }

    ... other fields
}

Я получаю эту ошибку компиляции: Ошибка 70 Параметр 'test' записи операции домена 'GetComplexObject' должен бытьодин из предопределенных сериализуемых типов .

После некоторых поисков в Интернете я нашел этот поток сообщений MSDN .В нем говорится, что это ограничение служб RIA, и поток не определяет достойных обходных путей.

Теперь, кажется, есть некоторые грязные обходные пути:

  • Измените комплексный параметр навведите string и сериализовать / десериализовать параметробъект самостоятельно, что я считаю очень хакерским решением.

  • Используйте тег [Invoke] в методе службы домена и потеряйте все функции отслеживания RIA, для которых япрежде всего, используя RIA.

Существуют ли альтернативы для упомянутых решений, которые имеют меньше недостатков?Кто-то нашел более элегантный способ решения этой проблемы?

Спасибо

Ответы [ 2 ]

6 голосов
/ 23 августа 2010

Грязный обходной путь три, это использовать атрибут [Invoke] и добавить метод к службе домена для предоставления «сложного типа», который сообщает инструменту RIA WCF для создания объекта на стороне клиента:

public ComplexObjectParameter ExposeComplexObjectParameter()
{
    throw new NotSupportedException();
}

Я поместил NotSupportedException в методы своей доменной службы, чтобы предотвратить сбои в режиме без вывода сообщений, если метод вызывается удаленно.

Я не уверен в том, как это решение влияет на проблему потери "всего отслеживания RIAфункциональность».Он не отвечает, как создать составной запрос, используя сложный тип в качестве параметра.

Это грязно, но абстрагирует проблему, ближайшую к источнику проблемы.Код вызова и получения чище.Это поддерживает «элегантность» на более высоком уровне, одновременно отталкивая грязь.

2 голосов
/ 13 декабря 2011

Супер старый вопрос, я знаю. Но я просто получил немного от этого и нашел ответ. Из документов MSDN на ComplexObject :

Но ComplexObject отличается от сущности в важных отношениях. В частности, сложные типы не имеют идентичности. Это означает, что у них нет членов, помеченных KeyAttribute, и поэтому клиенты не могут выполнять кэширование идентификаторов для них, как это происходит для сущностей. Сложные типы нельзя использовать совместно или ссылаться на них из нескольких родительских экземпляров, и они не поддерживают наследование.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...