Je construis un service Web WCF qui renvoie un objet composite qui ressemble à ce qui suit:WCF ne peuvent pas retourner XmlElement de XmlDataDocument.DocumentElement
[DataContract]
public class WebServiceReturn
{
...
[DataMember]
public XmlElement Results { get; set; }
...
}
Quand je retourne un objet WebServiceReturn avec le code suivant , tout va bien:
XElement cities = new XElement("Cities",
from r in results
select new XElement("City", r));
using (XmlReader xmlReader = cities.CreateReader())
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlReader);
WebServiceReturn response = new WebServiceReturn();
response.Results = xmlDoc.DocumentElement;
}
Cependant, lorsque j'utilise le code ci-dessous, qui prend une XmlElement à partir des résultats d'un appel de procédure stockée qui retourne un XmlDataDocument, une CommunicationException est levée (qui n'a pas d'exceptions internes).
XmlDataDocument xdd = DataAccess.ExecuteXML("MyStoredProc", parameter);
response.Results = xdd.DocumentElement;
La partie est source de confusion si je convertis le XmlDataDocument.DocumentElement (qui est un XmlElement) dans un XElement, puis de nouveau dans un XmlElement, il n'y a aucun problème (wow qui était une bouchée) - donc le code suivant retourne sans problème.
XmlElement xe = DataAccess.ExecuteXML("MyStoredProc", parameter).DocumentElement;
XDocument xDoc = new XDocument();
using (XmlWriter xmlWriter = xDoc.CreateWriter()){
xe.WriteTo(xmlWriter);
}
using (XmlReader xmlReader = xDoc.Root.CreateReader())
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(xmlReader);
response.Results = xmlDoc.DocumentElement;
}
Les détails de CommunicationException sont:
[CommunicationException: Le serveur n'a pas fourni une réponse significative; Cela peut être dû à une incompatibilité de contrat, à une fermeture de session prématurée ou à une erreur interne du serveur.]
J'ai également mis à jour la référence de service dans mon application de test plusieurs fois, ce qui n'a eu aucun effet.
Le problème avec mon code de test qui appelle le service Web est-il le problème? Pourquoi la conversion d'un XmlElement en un XElement et ensuite en XmlElement corrige le problème? Toute information serait très appréciée! :)
Merci! Cela fonctionne également - serait toujours agréable de savoir quel est le problème exact de travailler avec l'élément document de XmlDataDocument et WCF est bien :) –