Метод Webservice возвращает XmlDocument, ссылка видит XmlNode - PullRequest
4 голосов
/ 06 апреля 2011

Я столкнулся с проблемой, которую не могу решить, поэтому прошу вас помочь мне! Я работаю с WebService и пытаюсь вернуть XmlDocument из метода WebService с именем GetSystemDocument, который выглядит следующим образом:

[WebMethod(Description = "blabla")]
    public XmlDocument GetSystemDocument(string DocumentName)
    {
        return new XmlDocument();
    }

В проекте, где я ссылаюсь на этот веб-сервис. 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, обновить ссылку, перестроить веб-сервис. У кого-то есть решение?

Вот такой Аналогичный вопрос , который остается без ответа.

Большое спасибо

1 Ответ

4 голосов
/ 06 апреля 2011

Результат веб-метода включен в документ SOAP, который является документом XML. Поэтому, если вы хотите вернуть XML из веб-метода, вы должны вернуть XmlElement.

[WebMethod(Descrption = "foo")]
public XmlElement GetSystemDocument(string documentName)
{
   var doc = new XmlDocument();
   doc.LoadXml("<foo> <bar x="a"/> </foo>");
   return doc.DocumentElement;
}

Edit: Исправил код, чтобы убедиться, что он компилируется

...