Я создаю веб-сервис WCF, который возвращает составной объект, который выглядит примерно так:
[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: сервер не предоставил значимого ответа; это может быть вызвано несоответствием контракта, преждевременным завершением сеанса или внутренней ошибкой сервера.]
Я также несколько раз обновлял ссылку на службу в моем тестовом приложении, которая не имела никакого эффекта.
Проблема с моим тестовым кодом, который вызывает веб-сервис? Почему преобразование XmlElement в XElement и затем обратно в XmlElement решило проблему? Любая информация будет высоко ценится! :)