2010-04-13 2 views
0

У меня есть две службы, одна из которых вызывает другую. Оба помечены как одиночки следующим образом:Как вызвать службу однопользовательского режима WCF в одном сервисе WCF без висит?

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, 
    ConcurrencyMode = ConcurrencyMode.Multiple)] 
public class Service : IService 

И я настроить их с ServiceHost следующим образом:

ServiceHost serviceHost = new ServiceHost(singletonElement); 
serviceHost.Open(); 

Когда родитель служба пытается вызвать службу ребенка на ту же машину, родительские служба висит, ожидая детского обслуживания.

Я уже рассматриваю возможность перехода от модели синглтона, но что-то не так с моим подходом? Есть ли объяснение этому поведению и выход из него?

+0

Вы имеете в виду услугу WCF? –

+0

Прошу прощения, да. Я отредактирую вопрос –

ответ

0

Проблема была в том, что я размещался в приложении WPF и не использовал UseSynchronizationContext для false. Это делает хост службы WCF в потоке пользовательского интерфейса, что вызывает тупик, когда у вас есть одна служба (в потоке пользовательского интерфейса), вызывающая другую службу (также в потоке пользовательского интерфейса).

1

Родительская служба зависает, потому что может быть вызвано, что метод дочернего обслуживания занимает слишком много времени. Если потребуется много времени для возврата, вызовите его асинхронно или сделайте метод дочернего сербства IsOneWayo=True в атрибуте OpearationContract.

Односторонний сервис Огонь & Забудьте вид звонка не возвращает никакого значения.

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