Question

Certains services Web REST ont été implémentés dans WCF. Je souhaite que ces services reviennent " Requête incorrecte " lorsque le fichier xml contient des éléments non valides.

La sérialisation XML est gérée par XmlSerializer. Par défaut, XmlSerializer ignore les éléments inconnus. Je sais qu'il est possible de raccorder XmlSerializer.UnknownElement et de lever une exception à partir de ce gestionnaire, mais comme il s'agit de la WCF, je n'ai aucun contrôle sur la sérialisation. Des idées sur la manière dont je pourrais implémenter ce comportement.

Était-ce utile?

La solution

"Je sais qu'il est possible de raccorder XmlSerializer.UnknownElement et de lever une exception à partir de ce gestionnaire, mais comme il s'agit de la fonction WCF, je n'ai aucun contrôle sur la sérialisation"

.

C'est réellement possible de le faire ...

Dans un projet WCF sur lequel j'ai travaillé, nous avons fait quelque chose de similaire en utilisant l'interface IDispatchMessageFormatter.

Pour plus d'informations, cliquez ici http://nayyeri.net/blog/use-idispatchmessageformatter-and-iclientmessageformatter-to-customize-messages-in-wcf/

Il vous permet de gérer les en-têtes de message, la sérialisation / désérialisation des contrôles, les codes d’état de retour, etc.

Autres conseils

Peut-être pouvez-vous retourner votre propre type en implémentant IXmlSerializable et générer l'exception que vous souhaitez dans les méthodes ReadXml et WriteXml ...

Cela vient d'une mémoire vague, car je n'ai pas tout le code sous la main, mais vous pouvez créer un type de message personnalisé (hérité de la classe "Message") à renvoyer dans vos services REST et à remplacer certaines méthodes pour créer réponses personnalisées.

    protected override void OnWriteMessage(XmlDictionaryWriter writer)
    {
        ...
    }

    protected override void OnWriteStartEnvelope(XmlDictionaryWriter writer)
    {
        ...
    }

    protected override void OnWriteStartBody(XmlDictionaryWriter writer)
    {
        ...
    }

    protected override void OnWriteBodyContents(XmlDictionaryWriter writer)
    {
        ...
    }

Ce n'est pas une réponse complète, mais cela pourrait vous pousser dans la bonne voie.

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