我正在构建一个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的详细信息是:
[CommunicationException:服务器没有提供有意义的回复;这可能是由于合同不匹配,过早的会话关闭或内部服务器错误造成的。]
我还多次更新了我的测试应用程序中的服务引用,但没有效果。
我的测试代码是否存在调用Web服务的问题?为什么要将XmlElement转换为XElement然后再转换回XmlElement来修复问题?任何信息都将非常感谢! :)
答案 0 :(得分:2)
我对XmlDataDocument
一无所知,但您不一定需要XDocument
- 尝试:
XmlDocument newDoc = new XmlDocument();
newDoc.Load(new XmlNodeReader(doc.DocumentElement));
return newDoc.DocumentElement;
仍然不理想,但对我来说看起来更干净......
答案 1 :(得分:1)
好吧,为了获得更多的错误信息,您需要在服务器的错误中启用调试详细信息 - 您现在收到的消息是通用的,无显示可能的攻击者WCF错误消息,基本上说:出了问题。
为此,您需要调整服务配置 - 添加此部分(如果您还没有):
<behaviors>
<serviceBehaviors>
<behavior name="MEXandDebug">
<serviceMetadata />
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
然后从服务定义中引用该部分:
<services>
<service behaviorConfiguration="MEXandDebug" name="WCFService.MyWCFService">
这应该会给你一个更有意义的错误,希望能让你知道出了什么问题。
否则,您需要调试服务器端代码并找出那里发生的事情。