SynchronizationContext.Current 在不同的应用程序域上运行时为空
Posted
技术标签:
【中文标题】SynchronizationContext.Current 在不同的应用程序域上运行时为空【英文标题】:SynchronizationContext.Current is null when run on different app domains 【发布时间】:2013-12-11 14:07:39 【问题描述】:我有一个 Web 应用程序在一台机器上运行,而服务在另一台机器上运行(即两者都在不同的应用程序域中)。我的服务层中有一个工作流服务,它从 SynchronizationContext.Current 获取同步上下文。我得到 SynchronizationContext.Current 始终为空。但是如果我在同一台机器(即相同的应用程序域)上运行我的应用程序和服务层,则 SynchronizationContext.Current 是 AspNetSynchronizationContext 并且它工作正常。有人可以帮我解决这个问题以运行不同的应用程序域。
【问题讨论】:
【参考方案1】:我通过覆盖同步上下文解决了这个问题
if (syncContext == null)
SynchronousSynchronizationContext sync = new SynchronousSynchronizationContext();
syncContext = sync;
class SynchronousSynchronizationContext : SynchronizationContext
public override void Post(SendOrPostCallback d, object state)
this.Send(d, state);
【讨论】:
【参考方案2】:同步上下文通常由某种框架创建,例如 ASP.NET、WPF、WinForms 等。听起来当您在自己的进程中运行服务时,您并没有使用任何框架这会做到这一点。
还值得一提的是,SynchronizationContext.Current 通常只返回当前线程的同步上下文,所以如果你从错误的线程调用它,它几乎肯定会返回 null。
如果您没有可用的同步上下文,您可以随时创建自己的。本文解释了如何:
Synchronization Contexts in WCF
【讨论】:
以上是关于SynchronizationContext.Current 在不同的应用程序域上运行时为空的主要内容,如果未能解决你的问题,请参考以下文章