Webservice方法返回XmlDocument,Reference看到一个XmlNode

时间:2011-04-05 20:56:48

标签: asp.net web-services xmldocument xmlnode

我遇到了一个我无法解决的问题,这就是我求求你帮助我的原因! 我正在使用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没有答案。

非常感谢

1 个答案:

答案 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;
}

编辑: 更正了代码以确保它编译