【问题标题】:How to access IReliableDictionary in service fabric如何在服务结构中访问 IReliableDictionary
【发布时间】: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


【解决方案1】:

如果我没看错,您似乎想在 MVC 控制器中使用 IReliableStateManager。在这种情况下,只需将其注入您的控制器。 ASP.NET Core 内置了一个不错的 DI 系统。Service Fabric 入门示例代码向您展示了如何执行此操作:https://github.com/Azure-Samples/service-fabric-dotnet-getting-started/tree/master/src/GettingStartedApplication/StatefulBackendService

【讨论】:

    猜你喜欢
    • 2019-01-25
    • 2018-06-08
    • 2017-01-28
    • 1970-01-01
    • 2017-04-04
    • 2017-05-24
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多