2009-10-29 4 views
0

Nous utilisons ExpertPDF pour prendre des URL et les transformer en fichiers PDF. Tout ce que nous faisons est à travers la mémoire, donc nous construisons la requête, puis lisons le flux dans ExpertPDF, puis écrivons les bits à classer. Tous les fichiers que nous avons demandés jusqu'ici sont simplement des documents HTML. Nos concepteurs mettent à jour les fichiers CSS ou modifient le code HTML et demandent de nouveau les documents au format PDF, mais souvent, les éléments sont mis en cache. Prenez, par exemple, si je renommer le seul fichier CSS et afficher la page HTML via un navigateur Web, la page semble cassée parce que le CSS n'existe pas. Mais si je demande cette page via le PDF Generator, cela semble toujours correct, ce qui signifie que quelque part le CSS est mis en cache. Voici le code de création PDF approprié:ExpertPDF et mise en cache d'URL

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

Lorsque je vérifie le fichier de trace, rien n'est chargé à partir du cache. J'ai vérifié le fichier journal IIS et trouvé une réponse 200 provenant de la requête, même après qu'un fichier ait été mis à jour (je m'attendrais à un 302). Nous avons essayé de mettre l'attribut No-Cache sur toutes les pages HTML, mais toujours pas de chance. J'ai même désactivé toute la mise en cache au niveau IIS. Y a-t-il quelque chose dans ExpertPDF qui pourrait être en cache quelque part ou quelque chose que je peux faire à l'objet de requête pour faire un rafraîchissement de toutes les ressources?

MISE À JOUR

je mis? Foo à la fin de mon style liens href et cela met à jour à chaque fois que le CSS. Existe-t-il un paramètre qui peut empêcher la mise en cache des feuilles de style afin que je n'ai pas à faire cette solution inélégante?

Répondre

1

En fait, c'est une solution tout à fait normal, mais je vous conseille d'utiliser quelque chose comme le date and time courant attaché au lien PDF/nom de fichier (comme vous l'avez fait pour la feuille css

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

plutôt que foo Comme la date et l'heure changeront TOUJOURS, vous devrez forcer le téléchargement à chaque fois

Je me risquerais à deviner que la mise en cache n'est pas la feuille de style CSS, mais plutôt le PDF est mis en cache par le Ajout de la variable d'URL à vous r stylesheet l'empêche d'être mis en cache. (Je pense que vous avez résolu le problème, mais probablement pas, à mon avis, la meilleure façon) Essayez le conseil ci-dessus, et vous ne devriez pas avoir de problèmes de mise en cache de fichiers.

PS. Je sais que vous pouvez utiliser DateTime.Now.ToString(formathere) mais je suis trop paresseux pour regarder vers le haut en ce moment;)

+0

Le PDF est jamais envoyé au client. Il est stocké sur le serveur, ce qui m'a rendu confus car il n'y aurait pas de client pour mettre en cache des choses. – Josh

+0

J'ai effectivement rencontré ce problème avec un site coldfusion. Je faisais des tests et j'ai constaté que le pdf ne se rafraîchissait jamais, Opera le mettant en cache et servant la version en cache. Je suis prêt à parier que c'est le problème. – andrewWinn