【问题标题】:Caching Proxy Design Advice缓存代理设计建议
【发布时间】:2010-11-12 05:54:00
【问题描述】:

我对代理比较陌生。
我目前需要为工作设计一个缓存代理。
我们有一个网络服务,它自然会根据对其的调用来提供数据。
我需要为缓存这些调用结果的富客户端应用程序创建代理。
结果基本上是由 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 缓存可能 不能正常工作。

【问题讨论】:

    标签: c# caching proxy .net-1.1


    【解决方案1】:

    首先,我在 Winforms 和服务解决方案中使用过 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 请求标头(也有 Cache-Control 选项)。

    【讨论】:

    • @Swanny:感谢您的回复。实际上,我正在尝试重用轮子而不是重写。因此,您的建议已被注意到。我会尝试并相应地给出反馈。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2012-10-31
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多