Questão sobre XMLTextWriters e Streams
-
03-07-2019 - |
Pergunta
Temos um projeto VXML que um 3º parses partido para nos fornecer um sistema de navegação do telefone. Nós obrigá-los a digitar um código de id para deixar uma mensagem, que é posteriormente revista pela nossa empresa.
Atualmente, temos este trabalho da seguinte forma:
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));
Eu só estou mantendo este aplicativo, eu não escrevê-lo ... mas a seção final parece complicado para mim.
Eu sei que ele está tomando o fluxo de saída e alimentar o XML escrito para ele ... mas por que é primeiro ler toda a cadeia? Isso não é ineficiente?
Existe uma maneira melhor para escrever o código acima?
Solução
Sim, basta escrever diretamente para o Output
Response (IO.StreamWriter) ou OutputStream
(IO.Stream):
XmlTextWriter XML_Writer = new XmlTextWriter(HttpContext.Current.Response.OutputStream, HttpContext.Current.Response.Encoding);
//...
XML_Writer.Flush();
Outras dicas
Depois que eu só posso chamar XML_Writer.Flush (), certo? Isso vai liberar o XML para o fluxo?
Você pode escrever diretamente para o fluxo de resposta:
Response.Cache.SetCacheability(HttpCacheability.NoCache);
XmlWriter XML_Writer = XmlWriter.Create(HttpContext.Current.Response.Output);
Para adicionar configurações para o escritor que você é melhor fora de usar o mais recente classe XmlWriterSettings . Dê-o como um parâmetro para a função XmlWriter.Create.