2008-10-01 7 views
2

Certains services Web REST sont implémentés dans WCF. Je souhaite que ces services retournent "Bad Request" quand le xml contient des éléments invalides.Contrôle du WCml XmlSerializer

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 d'accrocher XmlSerializer.UnknownElement et de lancer une exception à partir de ce gestionnaire, mais comme c'est dans WCF, je n'ai aucun contrôle sur la sérialisation. Des idées comment je pourrais implémenter ce comportement.

Répondre

2

« Je sais qu'il est possible de brancher XmlSerializer.UnknownElement et lancer une exception de ce gestionnaire, mais parce que cela est dans WCF je n'ai pas le contrôle de sérialisation »

Son 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.

Plus d'informations peuvent être trouvées ici http://nayyeri.net/blog/use-idispatchmessageformatter-and-iclientmessageformatter-to-customize-messages-in-wcf/

Il vous permet pic à les en-têtes de message, contrôler sérialisation/désérialisation, codes d'état de retour, etc.

+0

Le lien est mort. –

1

Peut-être que vous pouvez retourner votre propre type et la mise en œuvre IXmlSerializable thorw l'exception que vous voulez dans les méthodes ReadXML et WriteXml ...

1

Ceci est de vague souvenir que je n'ai pas tout le code à la main, mais Vous pouvez créer un message personnalisé (hériter de la classe "Message") de type à renvoyer dans vos services REST et remplacer certaines méthodes pour créer des 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) 
    { 
     ... 
    } 

Pas une réponse complète, mais pourrait vous pousser vers le bas du bon chemin.

Questions connexes