2010-03-15 5 views
0

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

Я хочу сохранить его в кеше, а не в файле. Вы можете помочь мне с №3? звучит интересно ... – Blankman

+0

oh, с XmlWriter Я могу сохранить в stringbuilder и, возможно, кешировать это? – Blankman

+0

@Blankman: да, кеширование результата StringBuilder будет работать. –

Смежные вопросы