我正在构建一个 WCF Web 服务,它返回一个类似于以下内容的复合对象:
[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;
}
但是,当我使用下面的代码(从返回 XmlDataDocument 的存储过程调用的结果中获取 XmlElement)时,会引发 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:服务器没有提供有意义的回复;这可能是由于合同不匹配、会话过早关闭或内部服务器错误造成的。]
我还多次更新了我的测试应用程序中的服务参考,但没有任何效果。
我调用 Web 服务的测试代码有问题吗?为什么将 XmlElement 转换为 XElement 然后再转换回 XmlElement 可以解决问题?任何信息都将不胜感激!:)