2010-05-06 5 views
5

Voglio un webservice ASMX con un metodo getPeople() che restituisce il seguente codice XML (non una risposta SOAP):Come posso restituire puro XML dal servizio web asmx?

<People> 

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

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

</People> 

Come posso fare questo?

risposta

2

Vedo che posso impostare il tipo di ritorno del metodo su XmlDocument. Questo sembra funzionare.

[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: hai provato questo? Non funziona. Restituirà quell'XML all'interno di una busta SOAP. –

+0

sì, l'ho provato, e almeno attraverso il metodo "invoke" sulla pagina automatica che è stata generata ha funzionato da qui il mio post. Lo proverò di nuovo per confermare. – User

+4

Mai e poi mai dipende da quella pagina di test. Tra l'altro, non invoca i metodi usando SOAP! –

1

È possibile utilizzare Soap Extensions per creare/personalizzare per le proprie esigenze.

3

Se non si desidera che la risposta sia in una busta SOAP, non si è inoltre preoccupati di chiamare il servizio Web utilizzando SOAP. per esempio. non stai creando classi proxy, referenze web, ecc. e basta usare il post http o chiamare il servizio web?

In tal caso, piuttosto che scrivere un servizio Web, scrivere un file di gestione ASHX. È quindi sufficiente impostare Response.ContentType su text/xml e fare Response.Write (XmlDocument.ToString()). Ciò restituirà un XML puro non adulterato più gli header http pertinenti.

+0

Sto valutando questa opzione. Ma sono ancora interessato alla risposta a questa domanda. – User