我在一台机器上运行Web应用程序,在另一台机器上运行服务(即两者都在不同的应用程序域中)。我的服务层中有一个工作流服务,它从SynchronizationContext.Current获取Synschronization Context。我得到SynchronizationContext.Current始终为null。但是,如果我在同一台机器上运行我的应用程序和服务层(即同一appdomain),则SynchronizationContext.Current是AspNetSynchronizationContext,它可以正常工作。有人可以帮我解决此问题,以运行不同的应用程序域。
答案 0 :(得分:0)
同步上下文通常由某种框架创建,例如ASP.NET,WPF,WinForms等。听起来就像当你在自己的进程中运行服务时,你没有使用任何类型的框架这会做到这一点。
同样值得一提的是,SynchronizationContext.Current通常只返回当前线程的同步上下文,所以如果你从错误的线程调用它,它几乎肯定会返回null。
如果您没有可用的同步上下文,则可以随时创建自己的同步上下文。本文解释了如何:
答案 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);
}
}