Вопрос

У нас есть проект VXML, который сторонняя сторона анализирует, чтобы предоставить нам систему навигации по телефону.Мы требуем от них ввести идентификационный код, чтобы оставить сообщение, которое позже будет рассмотрено нашей компанией.

На данный момент у нас это работает следующим образом:

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));

Я просто поддерживаю это приложение, я его не писал... но конечный раздел кажется мне запутанным.

Я знаю, что он берет выходной поток и передает в него записанный XML... но почему он сначала читает всю строку?Разве это не неэффективно?

Есть ли лучший способ написать приведенный выше код?

Это было полезно?

Решение

Да, просто напишите прямо в ответ Output (IO.StreamWriter) или OutputStream (IO.Stream):

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

Другие советы

После этого я могу просто вызвать XML_Writer.Flush(), верно?Это сбросит XML в поток?

Вы можете написать прямо в поток ответа:

Response.Cache.SetCacheability(HttpCacheability.NoCache);

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

Чтобы добавить настройки в программу записи, лучше использовать более новую версию. Настройки XmlWriterSettings сорт.Передайте его в качестве параметра функции XmlWriter.Create.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top