Как вызвать службу RIA из другой службы RIA?

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

    protected override AuthUser ValidateCredentials(string name, string password, 
        string customData, out string userData)
    {
        AuthUser user = null;
        userData = null;

        using (UserService svc = new UserService())
        {

            if (the result of a call on UserService shows a valid username/password)
            {
                //Create the user object
                user = new AuthUser()
                {
                    Name = name,
                    UserId = // that user's UserId
                };
            }

            if (user != null)
            {
                //Set custom data fields for HTTP session
                userData = user.UserId.ToString();
            }
        }

        return user;
    }

Результаты, которые я нахожу при поиске таких вещей, как «позвонить в службу ria из другой службы ria» и тому подобное, не связаны с фактическим вызовом одного из другого. Я делаю что-то неправильно с точки зрения парадигмы? Если нет, то как, черт возьми, вы это делаете? :)


person David Moye    schedule 30.09.2010    source источник


Ответы (1)


Агрегировать доменные службы, когда все, что вам нужно сделать, это Query, довольно просто. Что-то типа

новый MyDomainService (). GetUser (имя пользователя)

должно работать нормально. Однако, когда вы пытаетесь отправить или вызвать, это становится сложнее, потому что вам нужно будет инициализировать и удалить DomainService. Прошло некоторое время с тех пор, как я сделал это, но я думаю, что вы можете переопределить Initialize и Dispose в родительской DS, чтобы вызывать методы в дочерней DS. Для отправки вы не сможете вызывать методы напрямую. Вместо этого вам потребуется создать ChangeSet и вызвать метод DS.Submit.

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

person Kyle McClellan    schedule 30.09.2010
comment
Ну, разве я не чувствую себя инструментом :P. У меня не было GetUser (userName). Вместо этого у меня был только GetUsers(), который я пытался использовать .Where() или использовать LINQ. Ни один из них не сработал по каким-то очень сложным причинам (попробуйте как-нибудь повеселиться :). Как только я добавил GetUser, который возвращал один объект User, я стал золотым. Спасибо! - person David Moye; 30.09.2010