从Web Service中的Web应用程序访问缓存对象?

时间:2011-08-05 03:22:22

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

我将在前面说过,我已经在.NET中开发了很多年,并且在此之前已经使用了VB / BASIC多年,但我的背景主要是桌面应用程序和系统界面 - 我还是很漂亮所有这些Web应用程序的新功能,所以如果这是一个愚蠢的问题,我会在前面道歉。

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

进一步详细说明:我有一个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服务访问它?

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

2 个答案:

答案 0 :(得分:6)

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

BTW,asmx Web服务被认为是传统技术(参见this) - 因此我建议您迁移到WCF服务。如果您使用WCF服务,则必须启用ASP.NET兼容模式(请参阅this)才能访问HttpContext

答案 1 :(得分:0)

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