【问题标题】:Webservice method return XmlDocument, Reference sees a XmlNodeWebservice方法返回XmlDocument,Reference看到一个XmlNode
【发布时间】:2011-07-30 07:51:24
【问题描述】:

我遇到了一个我无法解决的问题,所以我请求你帮助我! 我正在使用一个 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]));
    }

问题就在那里。我们应该看到 XmlDocument 而不是 XmlNode,如果我手动编辑它,它会构建并且一切正常。

我尝试过重置 IIS、更新引用、重建 Web 服务。 有人有解决方案吗?

这里有一个Similar question,没有得到答复。

非常感谢

【问题讨论】:

    标签: asp.net web-services xmldocument xmlnode


    【解决方案1】:

    Web 方法的结果包含在作为 XML 文档的 SOAP 文档中。因此,如果你想从 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;
    }
    

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

    【讨论】:

    • 我想我刚刚抓到了!由于响应本身是一个 XmlDocument,它可能不包含 XmlDocument。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 2020-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多