Я строю веб-службы WCF, которая возвращает составной объект, который выглядит примерно следующим образом:WCF не вернешь XmlElement из XmlDataDocument.DocumentElement
[DataContract]
public class WebServiceReturn
{
...
[DataMember]
public XmlElement Results { get; set; }
...
}
Когда я вернуть объект WebServiceReturn со следующим кодом , все в порядке:
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;
}
Однако, когда я использую следующий код, который принимает XmlElement из результатов вызова хранимой процедуры, которая возвращает XmlDataDocument, CommunicationException отбрасывается (который не имеет внутренних исключений).
XmlDataDocument xdd = DataAccess.ExecuteXML("MyStoredProc", parameter);
response.Results = xdd.DocumentElement;
Запутанной часть, если я конвертировать XmlDataDocument.DocumentElement (который является XmlElement) в XElement, а затем обратно в XmlElement, нет никаких проблем (ничего себе, что был полный рот) - поэтому следующий код возвращается без проблем.
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;
}
Деталь CommunicationException является:
[CommunicationException: Сервер не обеспечивает значимый ответ; это может быть вызвано несоответствием контракта, преждевременным отключением сеанса или внутренней ошибкой сервера.]
Я также обновил ссылку на обслуживание в своем тестовом приложении несколько раз, что не повлияло.
Является ли проблема с моим тестовым кодом, вызывающим веб-сервис? Почему преобразование XmlElement в XElement, а затем обратно в XmlElement исправить проблему? Любая информация вообще была бы высоко оценена! :)
Спасибо! Это также работает - все равно было бы хорошо знать, какая именно проблема связана с элементом документа XmlDataDocument и WCF. :) –