Предоставление WebMethod, который возвращает XML в виде строки. - PullRequest
2 голосов
/ 18 марта 2010

Я продолжаю читать, как все заявляют, что возвращают XmlDocument, когда вы хотите вернуть XML. Есть ли способ вернуть сырой XML в виде строки? Я использовал много веб-сервисов (написанных другими), которые возвращают строку, содержащую XML. Если вы возвращаете XmlDocument, как этот метод используется пользователями, не входящими в .Net?

Какой метод просто возвращает необработанный XML в виде строки, не оборачивая <string></string>?

Спасибо!

1 Ответ

9 голосов
/ 18 марта 2010

Первое, что нужно понять с помощью веб-сервисов .Net, это то, что они использовали протокол SOAP.Это означает, что любые типы, которые вы возвращаете через веб-метод, будут сериализованы в XML.Поэтому каждый возвращаемый объект будет строкой XML, передаваемой обратно вызывающей стороне.

Если вы все еще просто хотите вернуть XML в качестве фактического строкового значения, создайте метод на стороне сервера в своем веб-сервисе следующим образом:

[WebMethod]
public string ReturnXMLString() {
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.LoadXml("<root><item>Hello World</item></root>");
    return xmlDoc.OuterXML;
}

Если, однако, вы пытаетесь вернуть фактический XML вызывающей стороне, просто позвольте .Net позаботиться о сериализации XML следующим образом:

[WebMethod]
public XmlDocument ReturnXMLString() {
    XmlDocument xmlDoc = new XmlDocument();
    xmlDoc.LoadXml("<root><item>Hello World</item></root>");
    return xmlDoc;
}

Наконец, если вы просто ищетеXML-ответ без упаковки протокола SOAP и сериализации ответа в виде XML, затем попробуйте ответ страницы со страницы на заказ:

void Page_Load(object sender, EventArgs e) {
XmlDocument xmlDoc= new XmlDocument();
xmlDoc.LoadXml("<root>Hello World</root>");
Response.ContentType ="text/xml";
xmlDoc.Save(Response.Output);
...