2008-12-08 3 views
4

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

Попробуйте простой веб-сервис, который возвращает 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 this post implying that this is a bug.

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

Спасибо.

ответ

5

Там, как представляется, проблема с каким образом XElement сериализации, проверьте here ...

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

+0

Будучи более предписывающим - природа XElement является неопределенной до времени исполнения. Однако WebMethod нуждается в определенном корне, чтобы начать десериализацию. Обертка - это путь. – stephbu 2008-12-08 15:48:02

3

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

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

0

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

0

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

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

Это, кажется, работает хорошо.

Смежные вопросы