2013-12-11 2 views
0

У меня есть веб-приложение, работающее на одной машине и службах на другом компьютере (то есть в разных доменах приложений). У меня есть служба рабочего процесса на моем уровне сервиса, который получает Синхронизационный Контекст из SynchronizationContext.Current. Я получаю SynchronizationContext.Current всегда как null. Но если я запустил оба уровня приложений и сервисов на одном компьютере (т. Е. Тот же appdomain), SynchronizationContext.Current - это AspNetSynchronizationContext, и он отлично работает. Может ли кто-нибудь помочь мне решить эту проблему для запуска разных доменов приложений.SynchronizationContext.Current имеет значение null при запуске в разных доменах приложений

ответ

0

Я решил ее overiding контекст синхронизации

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

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

Контекст синхронизации обычно создается с помощью какой-либо структуры, такой как ASP.NET, WPF, WinForms и т. Д. Похоже, что когда вы используете свои службы в своем собственном процессе, вы не используете какие-либо которые сделают это.

Следует также упомянуть, что SynchronizationContext.Current обычно возвращает только контекст синхронизации текущего потока, поэтому, если вы вызываете его из неправильного потока, он почти наверняка вернет значение null.

Если у вас нет контекста синхронизации, вы всегда можете создать свой собственный. В этой статье объясняется, как:

Synchronization Contexts in WCF

Смежные вопросы