【问题标题】:Access cache object from Web Application in Web Service?从 Web 服务中的 Web 应用程序访问缓存对象?
【发布时间】:2011-08-05 03:22:22
【问题描述】:

我先说我已经使用 .NET 开发了很多年,在此之前也使用 VB/BASIC 开发了很多年,但我的背景主要是桌面应用程序和系统界面——我仍然很漂亮对所有这些网络应用程序的东西都是新手,所以如果这是一个愚蠢的问题,我先道歉。

也就是说,我的问题是:当您在 ASPX 页面中创建对象并将其存储在缓存中时,如何从驻留在同一应用程序中的 ASMX Web 服务访问它?

进一步详细说明:我有一个 Web 应用程序,其中包括 ASPX 页面、一个 ASMX Web 服务和一个由两个对象类组成的类库。当用户登录到应用程序时,他们配置了一些设置,并且对象被创建并存储在 system.Web.Caching.Cache 对象中。然后在下一页上将自定义对象从缓存中拉出,然后用户对 Web 服务进行 AJAX 调用(通过 jQuery)以检索一些数据。

问题在于,在 Web 服务响应中,我需要根据存储在 Web 应用程序缓存中的用户创建对象的内容来解析返回的数据。但是,我找不到从 Web 服务内部访问缓存对象的任何方法。

我有一个偷偷摸摸的怀疑,可能将我的自定义 .NET 对象序列化为 JSON 对象,并通过 AJAX 调用将它们传递给 Web 服务以进行反序列化,但坦率地说,我什至不知道如何开始那。加上对象的大小可能为 30 - 40K,并且 AJAX 调用的频率高达每 3 秒一次,所以我真的很想避免在每次调用时传递所有额外数据的开销,特别是因为数据我需要的已经位于 Web 服务所在的应用程序的内存中。

所以我再次问:当您在 ASPX 页面中创建一个对象并将其存储在缓存中时,您如何从驻留在同一应用程序中的 ASMX Web 服务访问它?

这有意义吗?我疯了吗?遗漏了一些明显的东西?任何人可以提供的任何见解都将受到高度赞赏。谢谢!

【问题讨论】:

    标签: asp.net wcf web-services caching jquery


    【解决方案1】:

    您可以使用HttpContext.Current 访问当前的 HTTP 管道状态。所以访问缓存需要使用HttpContext.Current.Cache

    顺便说一句,asmx Web 服务被认为是遗留技术(请参阅this) - 所以我建议您迁移到 WCF 服务。如果您使用 WCF 服务,则必须启用 ASP.NET 兼容模式(请参阅this)才能访问HttpContext

    【讨论】:

    • 做到了!我知道必须有一个简单的方法来做到这一点,我只是不知道那个对象模型。非常感谢!
    【解决方案2】:

    我没有尝试过您要查找的内容,但是对象以键值对的形式存储在缓存中,其中键可以是从简单整数到 guid 的任何内容,而值是您的对象。据我了解,asmx 服务只需要密钥,以便它可以查看缓存并返回对象。但我的理解还是我没有尝试过这种情况。

    【讨论】:

    • 知道如何在代码中做到这一点吗?当我这样做时:` Dim cacheObj As New System.Web.Caching.Cache Dim MyWall As Wall = cacheObj.Get("Wall") ` 我收到“对象引用未设置为对象实例”错误...
    • @Erick - 看起来您正在创建缓存的新实例,而不是访问当前实例。我想你想在他的回答中使用 VinayC 的方法。
    • 天啊!是的,这很明显,对吧?这就是我在 14 小时工作日结束时进行调试的结果。 VinnyC 的回答很到位。再次感谢您的帮助:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多