c# – 无法让AspNetCacheProfile在WCF 4.0服务中工作

c# – 无法让AspNetCacheProfile在WCF 4.0服务中工作,第1张

概述我在.svc文件中创建了一个非常基本的WCF服务应用程序,其中包含以下代码: using System.Collections.Generic;using System.ServiceModel;using System.ServiceModel.Activation;using System.ServiceModel.Web;namespace NamesService{ [ 我在.svc文件中创建了一个非常基本的WCF服务应用程序,其中包含以下代码:

using System.Collections.Generic;using System.ServiceModel;using System.ServiceModel.Activation;using System.ServiceModel.Web;namespace namesService{    [ServiceContract]    [ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]    public class namesService    {        List<string> names = new List<string>();        [OperationContract]        [AspNetCacheProfile("CacheFor60Seconds")]        [WebGet(UriTemplate="")]        public List<string> GetAll()        {            return names;        }        [OperationContract]        public voID Save(string name)        {            names.Add(name);        }    } }

web.config看起来像这样:

<?xml version="1.0"?><configuration><system.web>    <compilation deBUG="true" targetFramework="4.0" /></system.web><system.serviceModel>    <behaviors>        <serviceBehaviors>            <behavior>                <serviceMetadata @R_404_6822@GetEnabled="true"/>                <serviceDeBUG includeExceptionDetailinFaults="false"/>            </behavior>        </serviceBehaviors>    </behaviors>    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" /></system.serviceModel><system.webServer>    <modules runAllManagedModulesForAllRequests="true"/></system.webServer><system.web>    <caching>        <outputCache enableOutputCache="true"/>        <outputCacheSettings>            <outputCacheProfiles>                <add name="CacheFor60Seconds" location="Server" duration="60" varyByParam="" />            </outputCacheProfiles>        </outputCacheSettings>    </caching></system.web>

如您所见,GetAll方法已使用AspNetCacheProfile进行修饰,而cacheProfilename引用了web.config的“ChacheFor60Seconds”部分.

我在WCF测试客户端中运行以下序列:

1)使用参数“Fred”调用Save

2)致电GetAll – >正如预期的那样,“弗雷德”被归还.

3)使用参数“Bob”调用Save

4)调用GetAll – >这次“弗雷德”和“鲍勃”被退回.

我期待第二次调用GetAll时只返回“Fred”,因为它应该返回步骤(2)的缓存结果.

我无法弄清楚问题是什么,所以请一定帮助.

解决方法 您正在尝试缓存没有任何参数的完整结果,因此您的设置应该是

<outputCacheSettings>    <outputCacheProfiles>        <add name="CacheFor60Seconds" location="Server" duration="60"        varyByParam="none" />    </outputCacheProfiles> </outputCacheSettings>

编辑:

[OperationContract][AspNetCacheProfile("CacheFor60Seconds")][WebGet]public List<string> GetAll(){    return names;}
总结

以上是内存溢出为你收集整理的c# – 无法让AspNetCacheProfile在WCF 4.0服务中工作全部内容,希望文章能够帮你解决c# – 无法让AspNetCacheProfile在WCF 4.0服务中工作所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1228970.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存