2010-05-06 11 views
5

Ich möchte ein asmx Webservice mit einem Verfahren GetPeople(), das die folgenden XML (NICHT eine SOAP-Antwort) zurückgibt:Wie gebe ich reines XML vom asmx Web Service zurück?

<People> 

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

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

</People> 

Wie kann ich das tun?

Antwort

2

Ich sehe ich kann den Rückgabetyp der Methode zu XmlDocument festlegen. Dies scheint zu funktionieren.

[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: Haben Sie das versucht? Es funktioniert nicht. Es wird dieses XML in einem SOAP-Umschlag zurückgeben. –

+0

ja, ich habe es versucht, und zumindest durch die "invoke" -Methode auf der Auto-Seite, die generiert wird, hat es funktioniert daher meine Post davon. Ich werde es nochmal versuchen um es zu bestätigen. – User

+4

Niemals jemals von dieser Testseite abhängig. Unter anderem ruft es nicht die Methoden auf, die SOAP verwenden! –

1

Sie können Soap Extensions verwenden, um für Ihre Bedürfnisse zu erstellen/anzupassen.

3

Wenn Sie nicht möchten, dass sich die Antwort in einem SOAP-Umschlag befindet, haben Sie auch keine Lust, den Web-Service mit SOAP aufzurufen. z.B. Sie erstellen keine Web-Referenzen für Proxy-Klassen und verwenden einfach http-Post oder rufen Sie den Web-Service an?

Wenn dies der Fall ist, schreiben Sie eine ASHX-Handlerdatei, anstatt einen Webdienst zu schreiben. Sie können dann den Response.ContentType einfach auf text/xml setzen und Response.Write (XmlDocument.ToString()) ausführen. Dadurch wird reines unadaptiertes XML plus die relevanten HTTP-Header zurückgegeben.

+0

anzurufen. Ich erwäge diese Option ebenfalls. Aber ich bin immer noch an der Antwort auf diese Frage interessiert. – User

Verwandte Themen