【发布时间】:2017-11-30 08:36:29
【问题描述】:
[Route("testApp/{Id}")]
[HttpGet]
public async Task<List<string>> testApp(Guid Id)
{
return await new Heavy().WorkOnDictionary(Id);
}
我创建了一个有状态服务,并在我想访问 IReliableDictionary 的调用之一中实现了 REST api 调用,但我不能这样做,它要求 stateManager 我想访问在类 Heavy 中定义的 WorkOnDictionary() 函数中的 IReliableDictionary
public async Task<List<string>> WorkOnDictionary(Guid Id){
IReliableDictionary<string, List<string>> Dictionary = await this.StateManager.GetOrAddAsync<IReliableDictionary<string, List<string>>>("stringlistcache");
string monitorName=convertIdtoMonitor(Id);
using (var tx = this.StateManager.CreateTransaction())
{
var cachedValue = await Dictionary.TryGetValueAsync(tx, monitorName);
await tx.CommitAsync();
if(cachedValue.HasValue)
return cachedValue.Value
else
{
var res=await GetdetailFrmRemote(monitorName)
Dictionary.AddAsync(tx,monitorName,res);
return res;
}}
}
我应该如何初始化 StateManager?
【问题讨论】:
-
请分享一些代码。很难说是什么问题。
-
@PeterBons 添加代码
-
我假设
Heavy是有状态服务,而您的 Web api 是在无状态服务中实现的?您不应该以这种方式创建 ASF 服务的实例。您应该使用例如远程处理与它进行通信。见stackoverflow.com/questions/36589435/… -
否则,如果您在有状态服务中添加了 Web api,请查看:stackoverflow.com/questions/42049901/…
-
@PeterBons Heavy 不是有状态的类,如果我让它成为有状态的,那么我必须在它的构造函数中传递上下文,我不知道从哪里获取上下文..
标签: azure-service-fabric stateful