Я хочу asmx веб-сервис с методом GetPeople (), который возвращает следующий XML (НЕ ответ SOAP):
<People>
<Person>
<FirstName>Sara</FirstName>
<LastName>Smith</LastName>
</Person>
<Person>
<FirstName>Bill</FirstName>
<LastName>Wilson</LastName>
</Person>
</People>
Как я могу сделать это?
Я вижу, что могу установить тип возвращаемого значения метода на XmlDocument . Кажется, это работает.
[WebMethod]
public XmlDocument ReturnXml()
{
XmlDocument dom = new XmlDocument();
XmlElement people = dom.CreateElement("People");
dom.AppendChild(people);
XmlElement person = dom.CreateElement("Person");
people.AppendChild(person);
XmlElement firstName = dom.CreateElement("FirstName");
person.AppendChild(firstName);
XmlText text = dom.CreateTextNode("Bob");
firstName.AppendChild(text);
// load some XML ...
return dom;
}
Посмотрите на использование [ScriptMethod]
атрибута.
Если вы не хотите, чтобы ответ был в SOAP-конверте, вы также не беспокоитесь о вызове веб-службы с помощью SOAP. Например, вы не создаете прокси-классы веб-ссылок и т.д. и просто используете http post или get для вызова веб-службы?
Если да, то вместо того, чтобы писать веб-службу, напишите файл обработчика ASHX. Затем вы можете просто установить Response.ContentType в text/xml и сделать Response.Write(XmlDocument.ToString()). Это вернет чистый XML без примесей плюс соответствующие http-заголовки.
Вы можете использовать Soap Extensions для создания/настройки под свои нужды.