Webmethod che restituisce un documento xml sul body http

martedì 08 aprile 2008 - 21.11

bluelions Profilo | Senior Member

Salve ragazzi, avrei un problemino abbastanza serio da risolvere e volevo un vostro piccolo aiuto. Vi speigo il problema:
ho creato un webmethod, che ricevo nel body dell'http una stringa in formato xml che io deserializzo, effettuo delle operazioni e dovrei restituire un nuovo documento xml anche io nel body dell'http.
Sono riuscito a passare al mio webmethod tramite httpRequest la stringa xml, ora però, fatte tutte le operazioni dovrei restituire anche io nel body dell'http una stringa in formato xml.
Sono riuscito a crearmi il file xml che devo restituire...ma non ho capito come faccio a metterlo nel body.....
mi domandavo il mio webmethod deve essere una void e cioà non restituire nulla o deve restituire qualcosa?

rossimarko Profilo | Guru

Ciao,

in che senso metterlo nel body? Potresti mandarci la funzione che utilizzi adesso?

Io ho fatto un semplice esempio ritornando un XmlDocument e vedo correttamente il contenuto xml del documento come risposta al webservice

[WebMethod] public System.Xml.XmlDocument GetXml() { System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); doc.LoadXml("<xml><ID>1</ID><Nome>Pippo</Nome></xml>"); return doc; }
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

bluelions Profilo | Senior Member

allora mi spiego meglio, ho un webservice con un metodo proprio come l'ha fatto tu che mi restituisce un xmlDocument, ora io per chiamare il web method lo chiamo tramite url e gli passo nel body dell'http il documento xml da elaborare per poi restituirmi un altro doc xml.

Mi sono creato una form dove con un pulsante ed utilizzando httpRequest e httpResponse faccio questo:
string path = AppDomain.CurrentDomain.BaseDirectory;

string fullPath = Path.Combine(path, "XML_DOC.XML");
System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
doc.Load(fullPath);

string content = doc.InnerXml;

try
{
//Qui mi chiamo il WebServices e gli passo il file xml in formato stringa:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(UrlWs);

request.Method = "POST";
request.SendChunked = true;
request.ContentType = "text/xml; charset=UTF-8";

byte[] buffer = new System.Text.ASCIIEncoding().GetBytes(content);

request.ContentLength = content.Length;

Stream requestStream = request.GetRequestStream();
requestStream.Write(buffer,0,buffer.Length);
requestStream.Close();

Ora però io ho utilizzato il response,perchè il mio Web Method mi restituisce un xmlDocument e io devo fare in modo che chi chiama il webservices,lo prende in formato stringa nel body http.Mi domando utilizzando il response, va bene o devo fare diversamente?
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

StreamReader responsestream = new StreamReader(response.GetResponseStream());

string output = responsestream.ReadToEnd();
responsestream.Close();
response.Close();

MessageBox.Show (output);
}
catch(WebException ex)
{
throw ex;
}

rossimarko Profilo | Guru

Come mai usi l'HTTP request e non hai aggiunto una web reference al progetto (tasto destro sul progetto --> Add Web Reference)? C'è qualche motivo particolare?
Aggiungendo al progetto la webreference ti crea automaticamente la classe che mappa i metodi del tuo webservice, e poi richiamarlo diventa veramente semplice.
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

bluelions Profilo | Senior Member

utilizzo httpRequest, perchè il mio webservices viene chiamato da un altra applicazione che non è dot.net e quindi per evitare di passare in query string o come file xml, ho deciso di passare il file xml come stringa in method POST, anche perchè in query string visto che la lughezza è limitata poteva troncare la stringa. Tutto qua

rossimarko Profilo | Guru

Ciao,

io ho provato a fare una prova con il codice che hai inoltrato e funziona correttamente.
Ho commentato la parte relativa all'invio del file perchè non mi interessava, però la lettura del file xml di ritorno è corretta. Ho richiamato il metodo del webservice che ti ho inviato nel post sopra (ritorna un XmlDocument) e giustamente come risultato ottengo:

<xml><ID>1</ID><Nome>Pippo</Nome></xml>

Nel tuo caso invece non ottieni niente? Ti ritorna una stringa vuota?
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

bluelions Profilo | Senior Member

ok, si si ora ho risolto sbagliavo io.
ti ringrazio-.....
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5