My HttpHandler looks like:
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/xml";
XmlWriter writer = new XmlTextWriter(context.Response.OutputStream, Encoding.UTF8);
writer.WriteStartDocument();
writer.WriteStartElement("ProductFeed");
DataTable dt = GetStuff();
for(...)
{
}
writer.WriteEndElement();
writer.WriteEndDocument();
writer.Flush();
writer.Close();
}
How can I cache the entire xml document that I am generating?
Or do I only have the option of caching the DataTable object?
Several things:
XmlTextWriterunless you’re still using .NET 1.1. UseXmlWriter.Create()instead.XmlWriterneeds to be in ausingblock, or you’ll have resource leaks when an exception is thrown. That’s very bad for something like anHttpHandler, since it can be called many times.MemoryStreamto base yourXmlWriteron. Create the XML as you currently are, but when you’re done, you can “rewind” theMemoryStreamby setting thePositionto 0. You can then write the contents of the stream to a file, or wherever you like.