2010-05-06 17 views
5

Quiero un servicio web ASMX con un método GetPeople() que devuelve el siguiente código XML (no una respuesta SOAP):¿Cómo devuelvo XML puro desde el servicio web de asmx?

<People> 

    <Person> 
     <FirstName>Sara</FirstName> 
     <LastName>Smith</LastName> 
    </Person> 

    <Person> 
     <FirstName>Bill</FirstName> 
     <LastName>Wilson</LastName> 
    </Person> 

</People> 

¿Cómo puedo hacer esto?

Respuesta

2

Veo que puedo establecer el tipo de devolución del método en XmlDocument. Esto parece funcionar

[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; 
} 
+0

-1: ¿Has probado esto? No funciona. Devolverá ese XML dentro de un sobre SOAP. –

+0

sí, lo probé, y al menos a través del método "invocar" en la página automática que se generó funcionó, por lo tanto, mi publicación de la misma. Lo intentaré de nuevo para confirmar. – User

+4

Nunca, nunca, dependa de esa página de prueba. Entre otras cosas, ¡no invoca los métodos que usan SOAP! –

1

Puede usar Soap Extensions para crear/personalizar según sus necesidades.

3

Si no desea que la respuesta esté en un sobre SOAP, tampoco se molesta en llamar al servicio web utilizando SOAP. p.ej. no estás creando clases de proxy, referencias web, etc. y simplemente usando http post o consiguiendo llamar al servicio web?

Si es así, en lugar de escribir un servicio web, escriba un archivo de controlador ASHX. Luego puede simplemente configurar Response.ContentType en text/xml y hacer Response.Write (XmlDocument.ToString()). Eso devolverá XML puro sin aditamentos más los encabezados http relevantes.

+0

. Estoy considerando esa opción también. Pero todavía estoy interesado en la respuesta a esta pregunta. – User

Cuestiones relacionadas