我遇到了一个我无法解决的问题,这就是我求求你帮助我的原因! 我正在使用WebService,我正在尝试从名为GetSystemDocument的WebService方法返回一个XmlDocument,它看起来像:
[WebMethod(Description = "blabla")]
public XmlDocument GetSystemDocument(string DocumentName)
{
return new XmlDocument();
}
在我引用此Web服务的项目中。 Visual Studio告诉我它不能隐式地将类型'System.Xml.XmlNode'转换为'System.Xml.XmlDocument'。
如果我查看Reference.cs文件(由Visual Studio生成),代码如下:
/// <remarks/>
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://doc.cexp.ca/GetSystemDocument", RequestNamespace="http://doc.cexp.ca", ResponseNamespace="http://doc.cexp.ca", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public System.Xml.XmlNode GetSystemDocument(string DocumentName) {
object[] results = this.Invoke("GetSystemDocument", new object[] {
DocumentName});
return ((System.Xml.XmlNode)(results[0]));
}
问题出在那里。而不是XmlNode,我们应该看到XmlDocument,如果我手动编辑它,它构建,一切正常。
我已尝试重置IIS,更新引用,重建Web服务。 有人有解决方案吗?
这是一个Similar question没有答案。
非常感谢
答案 0 :(得分:4)
Web方法的结果包含在SOAP文档中,该文档是XML文档。因此,如果要从Web方法返回XML,则应返回XmlElement。
[WebMethod(Descrption = "foo")]
public XmlElement GetSystemDocument(string documentName)
{
var doc = new XmlDocument();
doc.LoadXml("<foo> <bar x="a"/> </foo>");
return doc.DocumentElement;
}
编辑: 更正了代码以确保它编译