2 votes

Comment renvoyer plusieurs résultats à partir d'une méthode Web ?

Je développe une application Winforms. L'un de mes formulaires accepte la saisie de l'utilisateur et appelle un service Web pour ajouter la saisie dans la base de données. L'entrée doit être unique, mais je n'ai aucun moyen de savoir si elle est unique du côté client. J'envoie l'entrée au WS et il est responsable de l'ajouter à la base de données ou d'informer le client que l'entrée existe déjà.

Quelle est la bonne façon de procéder ?

Dois-je faire deux appels au WS, un pour savoir s'il est unique et un pour l'insérer dans la base de données ? Je sens des problèmes de synchronisation + deux allers-retours à travers la frontière.

Dois-je renvoyer un enum, ValueNotUnique et ValueInsertedSuccessfully ?

Ou peut-être lancer une exception ? Cela ne semble pas très performant, et je n'aime pas utiliser des exceptions pour des choses dont je sais déjà qu'elles pourraient ne pas fonctionner.

Y a-t-il un beau design à ce désordre ? Aide appréciée, merci d'avance !

3voto

marc_s Points 321990

Je ferais probablement quelque chose comme ça :

  • définir une énumération de valeurs de résultat ; ValeurExistante, ValeurInserte, etc.
  • définir un type d'objet de retour qui comprendrait
    • le résultat de l'opération, comme ce type d'énumération
    • si la valeur existait déjà - peut-être quelque chose comme un ID ou même certaines des données
    • si la valeur a été insérée avec succès, le nouvel ID

Donc, vous auriez :

public enum OpResult
{
   ValueInserted,
   ValueAlreadyExists
}

et un type de résultat :

public class ResponseType
{
    public OpResult Result { get; set; }
    public int UniqueID { get; set; }
}

Avec cette approche, vous pouvez facilement

  • étendre l'énumération et ajouter plus de résultats possibles pour votre opération
  • étendre le type de réponse et ajouter des informations supplémentaires si nécessaire

0voto

David Points 2413

Votre méthode Web peut renvoyer une classe personnalisée qui possède plusieurs propriétés. Les services Web ne sont pas tenus de renvoyer uniquement des types primitifs ou atomiques. Marquez la classe personnalisée comme étant sérialisable et assurez-vous que toutes les propriétés sont également sérialisables, etc.

Vous pouvez également lancer une exception si vous considérez que les cas où vous n'avez pas inséré sont des erreurs et attraper l'exception dans l'application appelante.

0voto

MUG4N Points 5011

Je m'y prendrais de la manière suivante :

Vous envoyez la demande au serveur. Là, vous vérifiez si la valeur est correcte. Si elle est correcte, vous effectuez une insertion et renvoyez un résultat valide à votre client. Si la valeur n'est pas correcte, vous renvoyez un message d'erreur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X