Query 操作で OutputCache を正常に機能させることはできますが、HasNoSideEffect=true (HTTP GET) としてマークしても、Invoke 操作でキャッシュを機能させることができません。
これが私のサービスのコードです:
[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;}
}
ネットワーク トラフィックの結果は次のとおりです。
ご覧のとおり、Query の 2 回目の実行には 1 秒もかかりませんが、Invoke の実行には再び 3 秒かかります。
Invoke 操作で RIA OutputCache を機能させるにはどうすればよいですか?