Доменная служба Silverlight - Как выполнить одну операцию [Invoke] - PullRequest
2 голосов
/ 18 апреля 2011

У меня есть пользовательская служба домена с одной операцией [Invoke], которая возвращает список объектов User.

Для того, чтобы заставить его скомпилироваться, мне нужно выделить объект User в свойстве (выделено как «DONOTUSE» ниже) или в методе вне операции [Invoke], в противном случае меня встретит следующая ошибка времени компиляции:

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

Как только я вытесняю свойство, оно компилируется и исполняется так, как задумано, но этот хак меня раздражает.

Я не хочу использовать атрибут [Query], поэтому, пожалуйста, не предлагайте мне это делать. Я говорю это потому, что если я переключаюсь на [Query], он прекрасно компилируется, однако я не хочу иметь дело с набором результатов EntityQuery или его отложенным выполнением.

В связи с тем, как я спроектировал архитектуру, потребностями варианта использования в этом примере и документацией MSDN, [Invoke] является наиболее подходящим средством.

[EnableClientAccess()]
public class UserDomainService : DomainService
{

    private IUserService userService;
    public UserDomainService(IUserService service)
    {
        userService = service;
    }

    [Invoke, RequiresAuthentication]
    public List<User> GetUsers()
    {
        return userService.GetUsers();
    }

    //HOW CAN I REMOVE THE FOLLOWING AND STILL COMPILE?
    public User DONOTUSE()
    {
        return null;
    }

}

Я оставлю вас с этим ... У меня есть другой проект, в котором есть пользовательские DomainServices с одиночными [Invoke] операциями, и он прекрасно компилируется. Я не могу при всей жизни понять, почему один компилируется над другим.

UPDATE

См. Комментарии в выбранном ответе ниже.

1 Ответ

2 голосов
/ 19 апреля 2011

Вы пытались выставить таких пользователей таким образом?

IQueryable<User> GetUsers() { throw new NotImplementedException(); }

Это способ заставить генератор кода WCF Ria выставить вашу сущность на стороне клиента.Вы также можете попробовать использовать общий код Class.shared.cs, посмотрите его в документах WCF Ria

...