Question

Nous développons un nouveau service Web et examinons les "meilleures pratiques". pour renvoyer des erreurs dans la réponse de soap.

Nous cherchions à créer un objet de réponse d'erreur que chaque réponse contiendrait en tant que propriété. Cela semble toutefois un peu lourd et se demandent s’il est possible d’utiliser l’en-tête SOAP pour transporter ces informations. Comment gérez-vous normalement les erreurs personnalisées avec SOAP?

Était-ce utile?

La solution

SOAPFault est utilisé pour contenir les informations d'erreur et d'état, et le serveur renvoie 500 dans l'en-tête HTTP pour qu'il le déclare comme une erreur.

voir la spécification de W3.org

http://www.w3.org/TR/ 2000 / NOTE-SOAP-20000508 / # _ Toc478383507

Vous pouvez concevoir votre propre jeton d’information en le plaçant dans l’en-tête de soap ou même dans un élément du résultat de votre retour, à condition de le documenter clairement pour le compte de tiers. Cependant, ce n'est pas la méthode standard pour générer des erreurs.

Autres conseils

Soap utilise déjà des en-têtes personnalisés pour les informations d'erreur. Tout ce que vous avez à faire est de lever une exception côté serveur et cette exception est déclenchée côté client en tant que SoapException .

Vous pouvez lancer SoapExceptions au niveau du serveur si vous souhaitez davantage de contrôle sur le message d'exception / info.

Modifier: Pour plus d'informations avec la demande, vous pouvez utiliser des en-têtes de savon personnalisés. Voici un exemple d'article sur CodeProject qui utilisait des en-têtes de savon personnalisés pour l'authentification, mais personnalisée. Les en-têtes de soap peuvent être utilisés à d'autres fins, comme l'envoi d'informations supplémentaires qui ne constituent pas nécessairement une condition d'erreur (peuvent être des informations de logique métier)

J'ai utilisé des techniques similaires dans le passé pour des opérations complexes. Surtout lorsque vous avez besoin de descriptions d'erreur (multiples?) Ainsi que d'un code d'erreur.

Les en-têtes de savon sont destinés aux informations hors bande et ne doivent pas être utilisés pour les messages d'erreur. En outre, les en-têtes de savon ne doivent pas être utilisés dans les réponses au savon pour les raisons suivantes:

  • si mustUnderstand est manquant ou égal à 0, le client peut les ignorer en toute sécurité.
  • si mustUnderstand vaut 1, le client ne peut pas signaler qu'il ne comprend pas (puisqu'il s'agit d'une réponse).

Et oui, je connais certaines normes WS- * décrivant les en-têtes de savon dans la réponse ...

Alors,

Utilisez les erreurs soap pour les erreurs suffisamment graves pour qu'il n'y ait pas d'objet de réponse. Ajoutez un jeton d'état à la réponse pour les avertissements et les messages d'information.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top