سؤال

ولدينا مشروع VXML أن يوزع 3rd الطرف أن تقدم لنا مع نظام الملاحة الهاتف. نطلب منهم لإدخال رمز هوية لترك رسالة، والتي تتم مراجعتها في وقت لاحق من قبل شركتنا.

لدينا في هذا العمل كما يلي:

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

لإضافة إعدادات للكاتب كنت أفضل حالا باستخدام أحدث <لأ href = "http://msdn.microsoft.com/en-us/library/system.xml.xmlwritersettings.aspx" يختلط = "نوفولو noreferrer "> XmlWriterSettings الصف. إعطائها كمعلمة إلى وظيفة XmlWriter.Create.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top