Возврат XElement из веб-службы - PullRequest
       22

Возврат XElement из веб-службы

4 голосов
/ 08 декабря 2008

Можно ли вернуть XElement из веб-службы (в C # / asp.net)?

Попробуйте простой веб-сервис, который возвращает XElement:

[WebMethod]
public XElement DoItXElement()
{
  XElement xe = new XElement("hello",
     new XElement("message", "Hello World")
     );

  return xe;
}

Это хорошо компилируется, но если вы попытаетесь запустить его, вы получите

Cannot use wildcards at the top level of a schema.

Я нашел это сообщение, подразумевающее, что это ошибка в .net.

Итак ... Могу ли я вернуть XElement из веб-службы? Если да, то как?

Спасибо.

Ответы [ 4 ]

5 голосов
/ 08 декабря 2008

Кажется, есть проблема с сериализацией XElement, отметьте здесь ...

Вы можете попробовать использовать XElement в виде строки или, как показано в статье, вы можете просто использовать оболочку класса и поместить свой XElement внутрь. Если смысл в том, чтобы вывести данные в универсальном формате, вы застрянете с возвращением строки.

3 голосов
/ 08 декабря 2008

Я пытался избежать строки!

Я могу вернуть XmlNode (созданный из XElement), который дает мне то, что мне нужно - кусок XML на клиенте. Спасибо за эту ссылку - я буду исследовать XWrapper дальше ...

0 голосов
/ 02 ноября 2016

Возвращает тип XmlElement и просто использует этот метод расширения для преобразования из XElement в XmlElement:

[System.Runtime.CompilerServices.Extension()]
public XmlElement ToXmlElement(XElement value)
{
    var xmlDoc = new XmlDocument();
    xmlDoc.LoadXml(value.ToString());
    return xmlDoc.DocumentElement;
}

Кажется, это хорошо работает.

0 голосов
/ 24 апреля 2009

Как ни странно, кажется, что это происходит только в том случае, если вы пытаетесь взглянуть на часть службы «Обнаружение» - метод можно запустить без проблем ...

...