高速缓存代理设计建议

时间:2009-07-20 08:28:55

标签: c# caching proxy .net-1.1

我对代理人比较陌生 我目前需要为工作设计一个缓存代理 我们有一个网络服务,它自然地根据对它的调用来提供数据 我需要为富客户端应用程序创建一个代理,以缓存这些调用的结果 结果基本上是由ID组合标识的产品的字符串名称。

我可以创建一个充当我的代理客户端的类,将结果缓存到缓存中,我正在考虑使用System.Web.Caching.Cache对象。

但是我想我会问是否有任何我错过的设计方面和考虑因素。是否有一个众所周知的设计,我还没有找到?

[更新 - 2009年10月12日]
似乎不建议使用System.Web.Caching.Cache进行客户端缓存。

  

http://msdn.microsoft.com/en-us/library/system.web.caching.cache.aspx

     

Cache类不适用于   在ASP.NET应用程序之外使用。   它的设计和测试用于   ASP.NET为Web提供缓存   应用。在其他类型   应用程序,例如控制台   应用程序或Windows窗体   应用程序,ASP.NET缓存可能   不能正常工作。

1 个答案:

答案 0 :(得分:0)

首先,我在Winforms和Service解决方案中使用了System.Web.Caching.Cache,并且从未遇到过问题。我建议通过测试来减轻免责声明以确保缓存正常工作并且不会泄漏资源,但我的测试都没有显示出这种情况。

或者,企业库中有一个缓存解决方案,可能还有一些您可以考虑的其他开源解决方案。如果您愿意,也可能有一些商业支持的。

但是,您是否在ASP.Net中托管您的Web服务(.asmx扩展名通常是一个很好的指标)。在那种情况下,你仍然在ASP.Net,因此免责声明不适用。

另请注意,ASP.Net具有可以直接从web.config驱动的缓存选项,而无需进行任何编码。

但以上所有内容都是服务器端缓存。

假设您的Web服务使用HTTP(或HTTPS)作为传输层,则代理和客户端缓存需要使用HTTP响应头,我认为涉及Cache-Control,Expires和可能Last-Modified。然后由客户端和代理决定是否支持缓存。

或者,如果您实际上尝试编写支持缓存的代理解决方案(并且这将重写一个轮子,因此您应该有充分的理由这样做)那么您可能需要一个HTTP处理程序,使用System.Web.HttpRequest和System.Web.HttpResponse表示事物的客户端,并使用System.Net.HttpWebRequest和System.Net.HttpResponse将请求传递到服务器。然后,System.Web.Caching.Cache可以支持您的代理上的缓存响应。也就是说,这里需要实现许多规则,包括HTTP Request头(也有Cache-Control选项)。