2010-09-30 28 views
1

Dans mon service d'authentification, je voudrais appeler des méthodes (query ou invoke) sur mon service utilisateur pour valider les informations d'identification. Ainsi, par exemple:Comment puis-je appeler un service RIA à partir d'un autre service 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; 
    } 

Les résultats que je me rends compte lorsque vous recherchez des choses comme « appel service ria d'un autre service de ria » et similaires ne sont pas liés à l'appel en fait l'un de l'autre. Est-ce que je fais quelque chose de mal du point de vue du paradigme? Si non, comment diable faites-vous cela? :)

Répondre

1

Agrégation de DomainServices lorsque tout ce que vous voulez faire est Query est assez facile. Quelque chose comme

nouvelle MyDomainService(). GetUser (userName)

devrait fonctionner très bien. Cependant, lorsque vous essayez de soumettre ou d'invoquer, cela devient plus compliqué car vous devez initialiser et disposer du service de domaine. Cela fait un moment que je l'ai fait, mais je pense que vous pouvez remplacer Initialize et Dispose dans votre DS parent pour appeler les méthodes de votre DS enfant. Pour la soumission, vous ne serez pas en mesure d'appeler les méthodes directement. Au lieu de cela, vous devrez créer un ChangeSet et appeler la méthode DS.Submit. En outre, pour votre scénario, il peut être intéressant de vérifier l'exemple d'authentification personnalisé here. C'est une approche légèrement différente pour ce que vous essayez de faire.

+0

Eh bien, je ne me sens pas comme un outil: P. Je n'ai pas eu un GetUser (userName). Au lieu de cela, j'avais seulement le GetUsers() que j'essayais de .Where() ou d'utiliser LINQ. Ni l'un ni l'autre n'ont travaillé pour des raisons très compliquées (essayez-le pour vous amuser un jour :). Une fois que j'ai ajouté un GetUser qui renvoyait un seul objet Utilisateur, j'étais dorée. Merci! –