ExpertPDF和URL缓存

时间:2009-10-29 13:47:47

标签: c# caching

我们正在使用ExpertPDF来获取URL并将其转换为PDF。我们所做的一切都是通过内存,所以我们建立请求,然后将流读入ExpertPDF,然后将这些位写入文件。到目前为止,我们所请求的所有文件都只是普通的HTML文档。我们的设计人员更新CSS文件或更改HTML并将文档重新请求为PDF,但有时候,事情会被缓存。举例来说,如果我重命名唯一的CSS文件并通过Web浏览器查看HTML页面,该页面看起来很糟糕,因为CSS不存在。但是,如果我通过PDF生成器请求该页面,它仍然看起来没问题,这意味着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)。我们已经尝试在所有HTML页面上放置No-Cache属性,但仍然没有运气。我甚至关闭了IIS级别的所有缓存。 ExpertPDF中是否存在可能在某处缓存的内容或我可以对请求对象执行的操作以对所有资源进行硬刷新?

更新

我把?foo放在我的样式href链接的末尾,这样每次都会更新CSS。某个地方是否有设置可以阻止样式表被缓存,所以我不必做这个不优雅的解决方案?

1 个答案:

答案 0 :(得分:1)

实际上这是一个非常正常的解决方案,但我建议使用附加到PDF链接/文件名的当前date and time之类的东西(就像你为css表所做的那样)

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

在您的stlye表上

而不是foo。由于日期和时间将始终更改,您将每次强制下载。

我冒昧地猜测缓存不是CSS样式表,而是客户端正在缓存PDF。将URL变量添加到样式表可防止其被缓存。 (我认为你解决了这个问题,但在我看来,可能不是最好的方法)尝试上面的提示,你不应该有任何文件缓存问题。

PS。我知道您可以使用DateTime.Now.ToString(formathere),但我现在懒得查找它;)