用于Invoke操作的Silverlight RIA Services OutputCache不起作用

时间:2013-10-30 14:49:20

标签: caching silverlight-5.0 wcf-ria-services outputcache

我可以成功地让OutputCache用于Query操作,但是我无法使缓存在我的Invoke操作中工作,即使我标记为HasNoSideEffect = true(HTTP GET)。

以下是我的服务代码:

[EnableClientAccess]
public class MyDomainService:DomainService
{
    [OutputCache(OutputCacheLocation.Server, 60, UseSlidingExpiration = true)]
    public IQueryable<MyEntity1> GetMyItems(string parameter)
    {
        var res = new List<MyEntity1>();
        var dtNow = DateTime.Now;
        for (int i = 0; i < 5; i++)
        {
            var newItem = new MyEntity1();
            newItem.Id = i;
            newItem.InstantiatedTime = dtNow;
            newItem.ParameterValue = parameter;
            res.Add(newItem);
        }
        Thread.Sleep(3000);
        return res.AsQueryable();
    }

    [System.ServiceModel.DomainServices.Server.Invoke(HasSideEffects = false)]
    [OutputCache(OutputCacheLocation.Any, 60, UseSlidingExpiration = true)]
    public IEnumerable<string> MyInvokeOperation(string parameter)
    {
        var res = new List<string>();
        var dtNow = DateTime.Now;
        for (int i = 0; i < 5; i++)
        {
            var newItem = i.ToString();
            newItem += dtNow.ToString() + parameter;
            res.Add(newItem);
        }
        Thread.Sleep(3000);
        return res;
    }
}

[DataContract]
public class MyEntity1
{
    [Key]
    [DataMember]
    public int Id { get; set; }
    [DataMember]
    public DateTime InstantiatedTime { get; set; }
    [DataMember]
    public string ParameterValue{get;set;}
}

以下是网络流量的结果:

Network traffic image from IE10

正如您所看到的,查询第二次执行只需不到一秒钟,而对于Invoke则需要3秒钟。

如何使RIA OutputCache适用于Invoke操作?

0 个答案:

没有答案