2010-06-24 7 views
0

J'ai une opération de service de la forme:WCF service d'exploitation ne pas exposer les données que interrogeable

[WebGet] 
public IQueryable<BusinessObject> BusinessObjectsByType(string name) 

avec règle d'accès

config.SetServiceOperationAccessRule("BusinessObjectsByType", ServiceOperationRights.All); 

Quand j'accéder à cette opération de service via un navigateur Web, il expose les données mais pas dans les flux et les entrées (format AtomPub) et ne me laisse pas non plus utiliser les options de requête de base comme $ top, $ orderby, etc. se plaignant qu'elles ne peuvent pas être appliquées à la ressource demandée. J'ai répondu à toutes les exigences spécifiées au http://msdn.microsoft.com/en-us/library/cc668788.aspx mais sans succès. Toute aide serait appréciée. Merci.

+0

Etes-vous sûr que l'opération est définie dans le contrat de service? Le code a-t-il changé dernièrement? Etes-vous sûr que vous avez reconstruit le service et l'avez commencé? –

+0

Je n'ai rencontré aucun post mentionnant le contrat de service pour une opération de service définie sur un service de données WCF. J'ai été reconstruire et frapper le service de données avant d'essayer cette opération de service. –

+0

Montrez-nous le contrat de service et comment vous exécutez ce contrat! –

Répondre

0

Si l'objet BussinesObject n'est pas reconnu comme entité, l'opération de service sera traitée comme si elle retournait IEnumerable à la place. Pour que l'interrogation fonctionne, l'opération de service doit renvoyer IQueryable où T est un type d'entité. En supposant que le fournisseur EF ou Reflection un type d'entité est un type qui possède une propriété key (par heuristique ou via l'attribut DataServiceKey) et pour lequel il existe une propriété sur la classe de contexte de type IQueryable. Si l'objet BussinesObject n'est pas une entité, WCF Data Services ne peut pas prendre en charge les requêtes sur le résultat de l'opération de service. Il y a plusieurs raisons, pour n'en nommer qu'une: pour sérialiser la réponse, chaque objet doit avoir une URL unique (c'est atom: id), pour pouvoir générer une URL unique, l'objet doit avoir des propriétés de clé. Et les propriétés de clé ne peuvent être définies que sur des entités.

+0

Merci pour vos pointeurs Vitek. J'ai vérifié tout ce que vous avez mentionné ci-dessus. Pour valider ce que je fais, j'ai créé un autre service de données pour une liste d'entités et vérifié que je suis capable d'interroger la réponse disponible sous forme de flux et d'entrées. Toutefois, lorsque j'ai converti ce service de données à une opération de service, la réponse n'était pas interrogeable. Je me demande si cela a quelque chose à voir avec le fait que je suis sur .Net 3.5 et Visual Studio 2008. –

+0

Avez-vous la dernière mise à jour pour WCF Data Services? http://blogs.msdn.com/b/astoriateam/archive/2010/01/27/data-services-update-for-net-3-5-sp1-available-for-download.aspx (Je ne Je ne sais pas si ça va le réparer si). Si vous pouviez partager la sortie de votre point de terminaison $ metadata, cela pourrait aider à mieux comprendre le problème. –

+0

OK, j'ai attrapé mon erreur. Je supprimais la règle d'accès pour l'entité lors de la création d'une opération de service. Je ne savais pas encore que je devais encore exposer la propriété de l'entité en service. –

Questions connexes