2009-03-26 10 views
6

Je suis maintenant en train de jouer avec WebServices, en utilisant l'infrastructure .NET (fichiers .asmx, pas WCF). Je me demande quelle est la meilleure pratique pour dire à l'utilisateur qu'une sorte d'erreur commerciale s'est produite dans l'appel de la méthode.Meilleures pratiques pour la gestion des erreurs dans un service Web

Mon petit test cas:

Je mesure des sondes qui doivent enregistrer avec un serveur central. Chaque sonde doit avoir une adresse physique différente. Pour vous inscrire, ils devraient appeler (via un service Web):

[WebMethod] 
public void RegisterReadingStation(out Guid sessionId, Int64 physicalAddress) 

Maintenant, la signature est pas défini dans la pierre - en fait, c'est ce que je suis en train de comprendre. :) Je dois en quelque sorte alerter la sonde si elle essaye de s'enregistrer en utilisant une adresse physique déjà prise.

La façon dont je le vois, je me suis quelques possibilités:

  • Throw un SoapException contenant les informations. Cependant, un message string :: n'est pas vraiment facile à faire.
  • Utilisez une sorte de classe de valeur comme paramètre de retour (ou même plus simple, une énumération). Si je fais cela, je suppose que j'ai dû manuellement sérialiser/désérialiser la classe sur le serveur/client?

Des commentaires à ce sujet?

Répondre

1

Je pense que le consensus commun serait d'utiliser un code de retour personnalisé (entier). Tant que le service documente les codes de retour possibles, cela devrait être réalisable.

+0

Eek, retour aux C-jours. Le problème avec cette approche est qu'elle n'est pas très flexible. Vous ne pouvez pas ajouter des messages d'erreur personnalisés comme une pile ou un message ou .. Je peux voir que ce serait la solution facile et multi-compatible si. – cwap

+0

J'ai une appréciation acquise pour les services Web qui se trompent du côté de la simplicité. –

+0

Bien que ce ne soit pas la meilleure réponse, je l'accepterai. J'aime l'aspect "Webservices devrait être simple à utiliser", donc c'est ce à quoi je m'en tiens pour l'instant :) – cwap

5

Je retourne une petite classe appelée ResultSet de chaque WebMethod, qui contient un code d'erreur int et un message d'erreur de chaîne. Cela vous permet de vérifier facilement s'il y a une erreur ou un succès, et si certains problèmes surviennent, cela peut se produire en cas de problème.

Si le WebMethod doit renvoyer des données, j'hériterai de ResultSet pour donner un ResultSet spécifique afin d'inclure également les données.

+0

Oui, c'était à ça que je me dirigeais aussi :) – cwap

+0

Mais que faire quand la fonction de service web est supposée retourner un objet comme employeeData quand tout va bien et devrait renvoyer un message d'erreur quand il y a une erreur.Comment retourner deux différents objets de la même fonction dans un scénario différent? –

+0

Ce que j'ai fait était de créer une nouvelle classe appelée EmployeeDataResultSet, qui hérite de ResultSet. Puis j'ai ajouté une propriété à EmployeeDataResultSet qui est la classe EmployeeData. Basiquement, vous encapsulez vos données d'employé dans votre ResultSet. – Moose

Questions connexes