【问题标题】:Access data globally in stateful service在有状态服务中全局访问数据
【发布时间】:2017-05-29 04:26:43
【问题描述】:

我将用户信息作为每次调用的一部分传递给有状态服务。我将此信息用于服务中的审计目的。

我是否必须在服务中传递这些信息,或者是否有其他机制(例如用户上下文)来保存我可以全局访问的数据?我过去曾使用线程存储(数据槽)来保存数据,但由于代码是异步的,我认为这不起作用?

【问题讨论】:

    标签: azure-service-fabric service-fabric-stateful


    【解决方案1】:

    有一个名为 CallContext 的概念,它可以提供帮助。在这里阅读更多:http://blog.stephencleary.com/2013/04/implicit-async-context-asynclocal.html

    【讨论】:

    • 这正是我想要的。谢谢!
    【解决方案2】:

    您无法将该信息保留在服务的某些成员中,因为您无法控制并发调用如何在多个线程上异步执行。运行时允许任务和异步方法“跳转”的方式意味着 ThreadStorage 不是保持该上下文的安全方式。

    您需要的是可以从您的ServiceRemotingDispatcher 一直到执行您的实际服务方法并且不受并发调用(可能是相同的方法)影响的东西。底层 Service Fabric 实现执行您的方法的方式意味着有多个任务和异步方法正在被调用,这也意味着仅仅基于此线程 id 是不可能的选项,因为它几乎可以保证跳转在你到达你的代码之前至少线程一次。

    我给一个类似的问题写了this answer(该问题已被删除,所以我自己添加了这个 q)。它基本上解决了你的问题,它基于CallContext as mentioned by @LoekD

    【讨论】:

      猜你喜欢
      • 2016-08-04
      • 2020-06-29
      • 1970-01-01
      • 2017-06-22
      • 2020-05-24
      • 2020-12-18
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      相关资源
      最近更新 更多