2011-08-04 5 views
1

Tout d'abord, je suis nouveau sur .NET WCF oData DataService et j'utilise jQuery du côté client. Je suis à la recherche d'un meilleur moyen (correct) de gérer l'ajout de 2 entités différentes en une seule transaction (post).WCF oData service de données Entité connectée WebInvoke (POST)

Par exemple. J'ai une entité parente avec ID et nom et entité enfant avec ID, ParentID et nom.

Je voudrais ajouter un parent et obtenir l'identifiant du parent et l'utiliser pour ajouter chaque enfant. Cependant, si l'ajout du parent ou de l'entité enfant échoue, elle doit annuler toutes les transactions. D'une façon, j'ai pensé à le faire en créant une méthode WebInvoke qui prendrait une chaîne json comme ceci {"Parent": {"name": "Daddy"}, "Children": [{"name": "Tom "}, {" name ":" Dick "}, {" name ":" Harry "}}} Lors du test de l'argument codé en dur dans la méthode, à chaque invocation, tout fonctionnait correctement. Toutefois, lors de l'appel de POST à ​​partir de jQuery, le paramètre est considéré comme NULL (ennuyeux). J'ai été en mesure d'envoyer des paramètres à la méthode en transmettant la chaîne json urlencodée comme partie de la chaîne de requête. Cependant, la chaîne de requête a une taille limite et je préfère ne pas l'utiliser.

Question 1) Est-il possible d'utiliser WebInvoke POST avec paramètre (s) dans le service de données WCF? Question 2) Y a-t-il un meilleur moyen (juste) de faire ce que j'essaie de faire.

Une autre façon de le faire (je ne l'aime pas) est d'appeler POST sur l'entité parente et obtenir son ID et l'utiliser pour poster pour chaque enfant. Si l'un échoue, appelez la suppression pour tous.

Répondre

1

Actuellement, l'opération de service (la méthode WebInvoke) ne prend pas en charge les paramètres de passage dans le corps de la demande, uniquement dans l'URL. La bonne solution pour cela est d'utiliser le traitement par lots. Le client peut envoyer toutes les opérations dans une seule demande de lot (avec un seul ensemble de modifications), puis le serveur essaiera de les appliquer et si l'une d'elles échoue, l'ensemble des modifications sera annulé. La création d'une charge utile par lots est un peu compliquée, mais il existe une bibliothèque de scripts java datajs qui vous aidera à cela. En fait, cela vous aidera avec le protocole OData.

+0

Je ne suis pas allé trop loin avec les tests mobiles mais supportera-t-il les paramètres si j'envoie des données à partir d'appareils mobiles (iPhone (Objectif C) et Android (Java))? Devrais-je continuer à utiliser le service ou envisager de le faire différemment? – imomin

+0

Je ne comprends pas ce que signifie être "supportera-t-il les paramètres". Le lot lui-même n'a pas de paramètres, il contient juste une liste d'opérations (POST, PUT, MERGE, DELETE). –

+0

Désolé, je veux dire serai-je en mesure de faire un POST par lots à partir d'appareils mobiles tels que iPhone et Android, tout comme datajs? – imomin

Questions connexes