ExpertPDF и кеширование URL - PullRequest
       16

ExpertPDF и кеширование URL

0 голосов
/ 29 октября 2009

Мы используем ExpertPDF, чтобы брать URL-адреса и превращать их в PDF-файлы. Все, что мы делаем, это через память, поэтому мы формируем запрос, затем читаем поток в ExpertPDF и затем записываем биты в файл. Все файлы, которые мы запрашивали до сих пор, представляют собой простые HTML-документы. Наши дизайнеры обновляют файлы CSS или меняют HTML и запрашивают документы как PDF-файлы, но часто вещи кэшируются. Возьмем, к примеру, если я переименую единственный CSS-файл и просматриваю HTML-страницу через веб-браузер, страница выглядит испорченной, потому что CSS не существует. Но если я запрашиваю эту страницу через PDF Generator, она все равно выглядит нормально, что означает, что где-то кешируется CSS. Вот соответствующий код создания PDF:

// Create a request
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.UserAgent = "IE 8.0";
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "GET";

// Send the request
HttpWebResponse resp = (HttpWebResponse)request.GetResponse();
if (resp.IsFromCache) {
    System.Web.HttpContext.Current.Trace.Write("FROM THE CACHE!!!");
} else {
    System.Web.HttpContext.Current.Trace.Write("not from cache");
}

// Read the response
pdf.SavePdfFromHtmlStream(resp.GetResponseStream(), System.Text.Encoding.UTF8, "Output.pdf");

Когда я проверяю файл трассировки, из кеша ничего не загружается. Я проверил файл журнала IIS и обнаружил ответ 200 на запрос, даже после обновления файла (я ожидал 302). Мы пытались поместить атрибут No-Cache на все HTML-страницы, но все же не повезло. Я даже отключил все кэширование на уровне IIS. Есть ли в ExpertPDF что-нибудь, что может где-то кэшироваться или что-то, что я могу сделать с объектом запроса, чтобы выполнить полное обновление всех ресурсов?

UPDATE

Я ставлю? Foo в конце моих ссылок в стиле href, и это обновляет CSS каждый раз. Есть ли где-нибудь параметр, который может предотвратить кэширование таблиц стилей, поэтому мне не нужно делать это не элегантное решение?

1 Ответ

1 голос
/ 29 октября 2009

На самом деле это совершенно нормальное решение, хотя я бы порекомендовал использовать что-то вроде текущего date and time, прикрепленного к PDF-ссылке / имени файла (как вы делали для листа CSS

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url + DateTime.Now.ToString().Replace(":", "").Replace("-", "").Replace(" ", ""));)

вместо foo на вашем листе. Поскольку дата и время ВСЕГДА изменятся, вы будете принудительно загружать каждый раз.

Я бы рискнул предположить, что кеширование - это не таблица стилей CSS, а скорее кеширование PDF клиентом. Добавление переменной URL в таблицу стилей предотвращает ее кэширование. (Я думаю, что вы исправили проблему, но, на мой взгляд, это не лучший способ) Попробуйте приведенный выше совет, и у вас не должно возникнуть проблем с кэшированием файлов.

PS. Я знаю, что вы можете использовать DateTime.Now.ToString(formathere), но мне лень сейчас его искать;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...