Вопрос о XMLTextWriters и потоках - PullRequest
       18

Вопрос о XMLTextWriters и потоках

1 голос
/ 30 сентября 2008

У нас есть проект 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 ... но почему он сначала читает всю строку? Разве это не неэффективно?

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

Ответы [ 3 ]

1 голос
/ 30 сентября 2008

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

XmlTextWriter XML_Writer = new XmlTextWriter(HttpContext.Current.Response.OutputStream, HttpContext.Current.Response.Encoding);
//...
XML_Writer.Flush();
0 голосов
/ 30 сентября 2008

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

Response.Cache.SetCacheability(HttpCacheability.NoCache);</p> <p>XmlWriter XML_Writer = XmlWriter.Create(HttpContext.Current.Response.Output);

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

0 голосов
/ 30 сентября 2008

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

...