wcf - IIS 托管 WCF 在调用之间共享数据
问题描述
我有一个 WCF Web 服务,它根据为请求者的用户组提供的最后收到的消息 ID 向用户返回数据。我正在查找数据库中是否有相关数据要返回。
我想加快响应时间,所以我想根据上次调用的最后收到的消息 id 来“缓存”数据列表,这样我就不需要每次都在数据库中查找数据以进行重复调用。
您能否建议是否有一种方法可以使用说字典,它将使用 groupID 作为键,值将是包含该组数据的对象(消息 ID 和相关数据)。如果数据将按请求返回,我会将其从字典中删除。
如果在字典中找不到数据,我会尝试从数据库中填充它(基于请求中的最后一条消息 ID)。
解决方案
根据您的描述,我建议您可以在 WCF.NET Framework 4.6.1 中使用 Cache,使您可以在 WCF Web HTTP 服务中使用 ASP.NET 中已有的声明式缓存机制。这允许您缓存来自 WCF Web HTTP 服务操作的响应。
要启用 WEB HTTP 服务缓存,您必须首先通过将 AspNetCompatibilityRequirementsAttribute 应用到服务设置 RequirementsMode 来启用 ASP.NET 兼容性为 Allowed 或 Required。
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
还要在 Web.config 文件中打开 ASP.NET 兼容模式,如下例所示。
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</system.serviceModel>
AspNetCacheProfileAttribute 属性指定包含要使用的缓存设置的缓存配置文件。
[WebGet]
[AspNetCacheProfile("CacheFor60Seconds")]
AspNetCacheProfileAttribute 指定的缓存配置文件名称标识添加到 Web.config 配置文件的缓存配置文件。缓存配置文件在一个元素中定义,如以下配置示例所示。
<system.web>
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="CacheFor60Seconds" duration="60" varyByParam="none" sqlDependency="MyTestDatabase:MyTable"/>
</outputCacheProfiles>
</outputCacheSettings>
</caching>
<!-- ... -->
</system.web>
Demo是Basic Web HTTP Service Caching,更多关于Cache in WCF的信息,请参考以下链接:
推荐阅读
- python - 减小输入时的空间复杂度
- php - 我对用户照片有疑问尝试获取非对象的属性“头像”
- loops - 如何在foreach行中foreach列
- css - 为什么我会遇到此错误:找不到要导入的文件或无法读取:./styles-variables?
- swift - Swift randomFloat 问题:“4294967295”不能完全表示为“Float”
- r - ranger 和 classProbs = TRUE 缺少所有准确度值
- python - 保存图像时,保存的 jpg 文件的颜色不正确(cv2.COLOR_BGR2RGB 无法修复)
- java - 试图从片段中的按钮按下打开活动。什么都没发生
- python - 如何对齐列表视图标签?
- python - from pymodbus.constants import Endian 抛出错误