跨异步WCF REST服务中的线程的上下文

时间:2014-01-07 00:36:16

标签: c# multithreading wcf rest asynchronous

我正在使用202 approach创建异步REST API。我必须在WCF(而不是Web API)中实现它,我的计划是生成一个新线程来执行异步工作,同时让WCF操作线程返回202.我遇到的问题是我的一些遗留代码需要在新线程中使用期望OperationContext和HttpContext来存储和检索上下文信息。我知道这两个都是特定于线程的,因此在生成的线程中为null。

我有两个问题:

  1. 是否有任何安全的方式来传播OperationContext和/或 HttpContext到新线程?
  2. 如果我能够修改遗产 离开OperationContext和HttpContext的代码,有没有 建议的方法在WCF设置中跨线程共享上下文信息?

1 个答案:

答案 0 :(得分:1)

  1. 您将负责确保您生成的任何线程都获得必要的上下文。 WCF仅负责确保OperationContext流与它启动的任何线程切换,这就是IExtension<OperationContext>是存储上下文数据的推荐方法的原因。一旦你离开大楼,你就独自一人......

  2. 对于线程池上的产生任务,典型的方法是准备任何必要的上下文信息,然后将其传递给代理人,例如Task.Run(() => doLongRunningTask(contextCopiedFromOperationContext))。然后,委托将负责在调用实际长时间运行的实现之前填充ThreadLocal<T>个对象(或您希望使用的任何机制)。