2010-10-03 6 views
3

Je voudrais une méthode sur mon service dans mon domaine similaire à:Un DomainService peut-il renvoyer un seul type personnalisé?

public SystemState GetSystemStatus() 
{ 
    return new SystemStatus 
    { 
     InterestingStatusValue1 = 1223, 
     OtherInterstingStatusValue = "abc", 
    } 
} 

qui ne fonctionne pas. Rien n'est généré automatiquement pour l'application client Silverlight. Howerver si je fais cela une méthode IQueryable, alors je reçois quelque chose de généré sur le client. Je vais obtenir une propriété SystemStates et une méthode Query sur l'objet de contexte.

N'y a-t-il aucun moyen de faire de cet appel un simple WCF? Je suppose que je pourrais un service WCF Silverlight activé sur mon site Web RIA, puis en définissant une référence de service (qui ne peut pas être correct?) (Et pourquoi ne puis-je pas voir la référence de services dans l'application Silverlight?)

À première vue, il semble que les services RIA forcent un CRUD très centré sur les données, ce qui est excellent pour les éditeurs de tableaux, mais pas tellement pour les applications métier qui traînent derrière un DataGrid et vous avez terminé.

Répondre

2

Vous pouvez retourner une seule entité en utilisant un attribut (en supposant que SystemState est votre entité):

Ex:

[Query(IsComposable = false)] 
public SystemState GetSystemStatus() 
{ 
    return new SystemStatus 
    { 
     InterestingStatusValue1 = 1223, 
     OtherInterstingStatusValue = "abc", 
    } 
} 

Rappelez-vous que cela est encore une requête et Ria services va générer une méthode votre DomainContext comme:

EntityQuery<SystemState> GetSystemStatusQuery() 

Utilisez comme un EntityQuery normal, mais gardez à l'esprit que vous ne pouvez pas effectuer des opérations de requête (tri ou filtrage) sur la re objet transformé.

Si vous souhaitez exécuter une opération sur le serveur, essayez d'utiliser l'attribut [Invoke]. Ex:

[Invoke] 
public SystemState GetSystemStatus() 
{ 
    return new SystemStatus 
    { 
     InterestingStatusValue1 = 1223, 
     OtherInterstingStatusValue = "abc", 
    } 
} 

Je ne sais pas comment votre type complexe de retour peut être, mais je suppose que si elle peut être sérialisé, il ne fonctionnera (pas sûr).

+0

EDIT: vérifier plus de détails sur le DomainService ici: http://msdn.microsoft.com/en-us/library/ee707373(VS.91).aspx – andrecarlucci

Questions connexes