2009-02-14 7 views
4

Je vais poser et répondre à ma propre question, j'espère que personne ne s'inquiète, mais j'ai pensé que cela pourrait être utile à d'autres personnes.Caractères illégaux dans le document XML dans ASP.NET Web Service

Si vous configurez un service Web ASP.NET qui renvoie des objets contenant des caractères non valides pour XML, une exception sera générée après la sérialisation de l'objet dans SOAP xml et le client tente de désérialiser ce fichier XML.

Comment résoudre ce problème?

+0

Si votre service Web renvoie du code XML mal formé, la solution consiste à réparer le service Web, et non à corriger le code XML mal formé. Le service Web fait probablement d'autres mauvaises choses que vous ne serez pas capable de cacher si facilement. –

+0

Ce sont les données que je tire d'un DB. Les caractères sont encodés correctement, ils ne sont tout simplement pas valables pour xml. Je préférerais que mes utilisateurs corrigent les caractères que ma pause de service Web chaque fois qu'ils entrent des caractères illégaux. De/Sérialisation fonctionne si vous dites au lecteur de ne pas valider ce qu'il lit. – Boog

+0

Quel composant XML utilisez-vous pour construire ce XML contenant des caractères invalides? Je vais sortir sur un membre ici et deviner la réponse est "J'utilise la concaténation de chaînes." –

Répondre

7

Pour résoudre ce problème, j'ai généré le fichier de classe pour mon webservice avec l'application wsdl.exe qui fait partie de .NET. C'est simple à faire, à l'invite de commande, tapez simplement wsdl.exe <path to webservice>

Après cela est généré je surchargée la méthode

protected XmlReader GetReaderForMessage(SoapClientMessage message, int bufferSize) 

comme celui-ci

protected override XmlReader GetReaderForMessage(SoapClientMessage message, int bufferSize) 
{ 
    XmlReaderSettings settings = new XmlReaderSettings(); 
    settings.CheckCharacters = false; 
    return XmlTextReader.Create(message.Stream, settings); 
} 

Cela indique au XmlTextReader d'ignorer la validité du fichier XML en cours de lecture. Il n'y a pas de raison que je m'inquiète si le xml est valide ou non quand je vais le désérialiser immédiatement.

Espérons que cela aidera quelqu'un avec le même problème là-bas!

+0

son travaille maintenant dans mon cas. – joshua

Questions connexes