在不同的应用程序域上运行时,SynchronizationContext.Current为null

时间:2013-12-11 14:07:40

标签: asp.net asp.net-mvc-4 appdomain

我在一台机器上运行Web应用程序,在另一台机器上运行服务(即两者都在不同的应用程序域中)。我的服务层中有一个工作流服务,它从SynchronizationContext.Current获取Synschronization Context。我得到SynchronizationContext.Current始终为null。但是,如果我在同一台机器上运行我的应用程序和服务层(即同一appdomain),则SynchronizationContext.Current是AspNetSynchronizationContext,它可以正常工作。有人可以帮我解决此问题,以运行不同的应用程序域。

2 个答案:

答案 0 :(得分:0)

同步上下文通常由某种框架创建,例如ASP.NET,WPF,WinForms等。听起来就像当你在自己的进程中运行服务时,你没有使用任何类型的框架这会做到这一点。

同样值得一提的是,SynchronizationContext.Current通常只返回当前线程的同步上下文,所以如果你从错误的线程调用它,它几乎肯定会返回null。

如果您没有可用的同步上下文,则可以随时创建自己的同步上下文。本文解释了如何:

Synchronization Contexts in WCF

答案 1 :(得分:0)

我通过覆盖synchronizationcontext

来解决它
if (syncContext == null)
{
   SynchronousSynchronizationContext sync = new SynchronousSynchronizationContext();
   syncContext = sync;
}

class SynchronousSynchronizationContext : SynchronizationContext
{
   public override void Post(SendOrPostCallback d, object state)
   {
      this.Send(d, state);
   }
}