Взаимоблокировка клиента WCF из-за обратного вызова, даже если обратный вызов IsOneWay

новичок в WCF.

У меня есть клиент, который блокируется при вызове службы WCF.

Служба будет вызывать обратный вызов для клиента во время вызова, который помечен как IsOneWay. Я подтвердил, что служба не блокирует обратный вызов.

Затем клиент немедленно снова вызывает ту же службу (в замкнутом цикле), еще не обслуживая обратный вызов. Затем клиент заходит в тупик (и точка останова на стороне службы никогда не срабатывает).

Итак, резюмируем:

CLIENT                                SERVICE
Call service -----------------------> (service breakpoint triggers)
(waiting for dispatch thread) <------ Invoke callback (IsOneWay - doesn't block)
                                      Service returns

Call service again immediately -----? (service breakpoint doesn't trigger)
(deadlock)

Я предполагаю, что обратный вызов захватил некоторую блокировку WCF на стороне клиента, а затем второй вызов службы от клиента также требует эту блокировку, поэтому возникает взаимоблокировка. Но это всего лишь предположение.

Я читал о ConcurrencyMode, но не могу решить, какой режим использовать или где его разместить, потому что я не на 100% понимаю, что происходит и что именно блокируется. .

Я также предпочел бы, чтобы все обратные вызовы обслуживались потоком отправки, если это возможно, поскольку это упрощает код.

Могут ли эксперты WCF пролить свет на то, что именно здесь происходит?

Большое спасибо

7
задан GazTheDestroyer 20 March 2012 в 08:38
поделиться