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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top