Кэширование xml-ответа от HttpHandler - PullRequest
0 голосов
/ 15 марта 2010

Мой HttpHandler выглядит так:

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

}

Как я могу кэшировать весь XML-документ, который я генерирую?

Или у меня есть только опция кэширования объекта DataTable?

1 Ответ

1 голос
/ 15 марта 2010

Несколько вещей:

  1. Не используйте XmlTextWriter, если вы все еще не используете .NET 1.1. Вместо этого используйте XmlWriter.Create().
  2. Ваше использование XmlWriter должно быть в блоке using, иначе у вас будут утечки ресурсов при возникновении исключения. Это очень плохо для чего-то вроде HttpHandler, поскольку его можно вызывать много раз.
  3. Вы можете создать MemoryStream, на котором будет основываться XmlWriter. Создайте XML, какой вы есть на данный момент, но когда вы закончите, вы можете «перемотать» MemoryStream, установив для Position значение 0. Затем вы можете записать содержимое потока в файл или в любое другое место. .
...