【问题标题】:How to return HttpContext.Current.Cache from WCF?如何从 WCF 返回 HttpContext.Current.Cache?
【发布时间】:2011-06-16 21:22:16
【问题描述】:

我有一个托管在 IIS 中的 WCF 服务,并希望返回驻留在 IIS 缓存中的数据 (HttpContext.Current.Cache) 该服务应该返回的最合适的类型选择是什么?

【问题讨论】:

    标签: wcf iis caching


    【解决方案1】:

    如果我是你,我不会依赖服务托管在 IIS 中这一事实。如果您想使用其他技术托管您的 WCF 服务怎么办?我认为您应该查看memcached,这是一个更通用的缓存解决方案,它适用于 .NET。

    无论如何,如果你真的想使用 IIS 缓存,请使用 System.Web.HttpRuntime.Cache 而不是 HttpContext.Current.Cache,因为 HttpContext 并不总是可用的。

    另外,正如 cruizer 所说,你的对象的实际类型是完全不相关的,只要它们是 serializable (也就是说,类用 [Serializable ()] 属性)。 IIS 缓存本身不需要可序列化的对象,但 WCF 需要。

    【讨论】:

    • 我同意。避免将您的服务与 IIS 紧密耦合。
    • 我也同意。请不要耦合 WCF 服务。这让 Juval Lowy 哭了。
    • +1 表示 System.Web.HttpRuntime.Cache 提示。我在使用 HttpContext.Current.Cache 时遇到问题,但没有意识到这是原因,当我切换到 HttpRuntime 时已解决,谢谢
    【解决方案2】:

    您序列化对象以传输它们,但无需缓存可序列化对象。

    您的服务调用您的业务逻辑以处理请求,但通过网络传输的不应该是您的业务对象,而是您的服务的数据合同。

    包装您的缓存 API 并将其与 HttpRuntime 缓存分离。正如DrJokepu所说,如果选择的话,通过HttpRuntime.Cache访问asp.net缓存。

    【讨论】:

      【解决方案3】:

      当然,无论你存储在缓存中的什么类型……它都应该是可序列化的

      【讨论】:

      • 如果缓存在内存中则不需要序列化
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 2018-01-11
      • 2012-12-30
      • 1970-01-01
      • 1970-01-01
      • 2018-07-16
      相关资源
      最近更新 更多