Только один обратный вызов за раз - ограничение WCF?

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

Я создал очень простое приложение: клиент вызывает службу, затем служба делает два обратных вызова клиенту одновременно: обратный вызов A, который занимает много времени; затем обратный вызов B, повторно вызывает в цикле, даже когда A находится в обработке. Проблема в том, что B никогда не дозвонится, пока A находится в обработке. Но как только А вернется, Б сразу же пройдет.

Вот что я пробовал: 1. Установите ConcurrencyMode в Multiple или Reentrant как на клиенте, так и на сервисе; 2. Установите для UseSynchronizationContext значение False как на клиенте, так и на службе; 3. Запустить вызов службы из рабочего потока на клиенте; 4. Создает прокси (служебный канал) в рабочем потоке на клиенте; 5. Запустите оба обратных вызова в собственном рабочем потоке службы; 6. Сделать оба обратных вызова односторонними.

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


person user2434400    schedule 08.08.2013    source источник


Ответы (1)


Не могли бы вы попробовать сделать асинхронный прокси? Когда вы щелкнете левой кнопкой мыши по своему проекту, нажмите «Добавить ссылку на службу», затем установите флажок «Создать асинхронные операции».

У вас будет клиент, который использует событие для обратного вызова. И если я не ошибаюсь, каждый обратный вызов выполняется в разных потоках.

person Brice2Paris    schedule 09.08.2013
comment
Спасибо Brice2Paris! Поскольку мой обратный вызов B является средством проверки состояния, он должен быть в режиме реального времени — асинхронный обратный вызов не будет соответствовать моим потребностям. Однако для устранения неполадок я думаю, что это стоит попробовать. На самом деле, я пытался сделать оба обратных вызова OneWay. Хотя я знаю, что вызовы OneWay — это не то же самое, что асинхронные вызовы, в некоторых аспектах они похожи. Когда я использую OneWay, служба продолжает отправлять вызовы обратно, но, тем не менее, все обратные вызовы где-то стоят в очереди - клиент не получит их до тех пор, пока обратный вызов A не вернется, и как только A вернется, все они врываются сразу. - person user2434400; 09.08.2013