Domanda

Abbiamo un progetto VXML che una terza parte analizza per fornirci un sistema di navigazione telefonica. Richiediamo loro di inserire un codice ID per lasciare un messaggio, che verrà successivamente esaminato dalla nostra azienda.

Attualmente funzioniamo come segue:

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Stream m = new MemoryStream(); //Create Memory Stream - Used to create XML document in Memory
XmlTextWriter XML_Writer = new XmlTextWriter(m, System.Text.Encoding.UTF8);
XML_Writer.Formatting = Formatting.Indented;
XML_Writer.WriteStartDocument();
/* snip - writing a valid XML document */
XML_Writer.WriteEndDocument();
XML_Writer.Flush();
m.Position = 0;
byte[] b = new byte[m.Length];
m.Read(b, 0, (int)m.Length);
XML_Writer.Close();
HttpContext.Current.Response.Write(System.Text.Encoding.UTF8.GetString(b, 0, b.Length));

Sto solo mantenendo questa app, non l'ho scritta ... ma la sezione finale mi sembra contorta.

So che sta prendendo il flusso di output e inserendo l'XML scritto in esso ... ma perché prima legge l'intera stringa? Non è inefficiente?

C'è un modo migliore per scrivere il codice sopra?

È stato utile?

Soluzione

Sì, basta scrivere direttamente nella risposta Output (IO.StreamWriter) o OutputStream (IO.Stream):

XmlTextWriter XML_Writer = new XmlTextWriter(HttpContext.Current.Response.OutputStream, HttpContext.Current.Response.Encoding);
//...
XML_Writer.Flush();

Altri suggerimenti

Dopodiché posso semplicemente chiamare XML_Writer.Flush (), giusto? Questo scaricherà l'XML nello stream?

Puoi scrivere direttamente nel flusso di risposta:

Response.Cache.SetCacheability (HttpCacheability.NoCache);

XmlWriter XML_Writer = XmlWriter.Create (HttpContext.Current.Response.Output);

Per aggiungere impostazioni al writer, è meglio usare il più recente XmlWriterSettings . Assegnalo come parametro alla funzione XmlWriter.Create.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top