Службе RIA нужны фиктивные публичные, не атрибутированные методы для компиляции - PullRequest
0 голосов
/ 25 июня 2010

Я внедряю приложение Silverlight со службой RIA WCF на стороне сервера, и у меня очень странное поведение.

На данный момент служба очень проста и имеет только несколько методов, всеони помечены атрибутом [Invoke].Эти методы примерно такие:

[Invoke]
MyEntity DoWorkAndReturnEntity(string someParameter)
{
    var entity = new MyEntity();
    //Do some preocessing...
    return entity;
}

, где тип MyEntity имеет одно открытое свойство с атрибутом [Key]:

public class MyEntity
{
    [Key]
    public int Key {get;set;}
}

Хорошо, если я попытаюсь скомпилироватьРешение, я получаю следующую ошибку:

Операция с именем 'DoWorkAndReturnEntity' не соответствует требуемой подписи.Возвращаемые типы должны быть сущностью, коллекцией сущностей или одним из предопределенных сериализуемых типов.

А теперь самое интересное.Если я добавлю открытый фиктивный метод, который возвращает объект того же типа, но с атрибутом no Invoke, то он компилируется и работает отлично!

public MyEntity __Dummy()
{
    return null;
}

Это происходит со всемиметоды, независимо от типа возвращаемого объекта.Поэтому я должен добавить фиктивный метод для каждого возвращаемого типа объекта.

Я полностью озадачен.Что здесь происходит?

Ответы [ 2 ]

1 голос
/ 05 июля 2010

Типы сущностей определяются набором методов запросов в доменной службе.

Метод invoke не может возвращать тип сущности, если только он не является одной из сущностей, возвращаемых службой домена ... следовательно, метод запроса __Dummy заставляет вещи работать.

0 голосов
/ 01 июля 2010

Службы RIA WCF используют конфигурацию в соответствии с соглашением, ваш метод DoWorkAndReturnEntity должен быть украшен атрибутом [Query] или вообще без атрибута, поскольку [Query] является значением по умолчанию, как и в вашем __Dummy методе.

...