Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net SynchronizationContext.Current在不同的应用程序域上运行时为空_Asp.net_Asp.net Mvc 4_Appdomain - Fatal编程技术网

Asp.net SynchronizationContext.Current在不同的应用程序域上运行时为空

Asp.net SynchronizationContext.Current在不同的应用程序域上运行时为空,asp.net,asp.net-mvc-4,appdomain,Asp.net,Asp.net Mvc 4,Appdomain,我在一台机器上运行一个Web应用程序,在另一台机器上运行服务(即,两者都在不同的应用程序域中)。我的服务层中有一个工作流服务,它从SynchronizationContext.Current获取Synchronization上下文。我得到SynchronizationContext.Current始终为null。但是,如果我在同一台机器(即同一个appdomain)上运行我的应用程序和服务层,SynchronizationContext.Current就是AspNetSynchronizatio

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

同步上下文通常由某种框架创建,如ASP.NET、WPF、WinForms等。听起来,当您在自己的进程中运行服务时,您没有使用任何框架来实现这一点

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

如果没有可用的同步上下文,则始终可以创建自己的同步上下文。本文介绍了如何:


我通过过度隐藏同步上下文解决了这个问题

if (syncContext == null)
{
   SynchronousSynchronizationContext sync = new SynchronousSynchronizationContext();
   syncContext = sync;
}

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