Вызовы WCF из silverlight выполняются последовательно, а не параллельно - PullRequest
1 голос
/ 18 марта 2012

Я использую Silverlight 5.0 и WCF 4.0 со структурой сущностей 4.0. Мой дизайн выглядит следующим образом: клиент Silverlight вызывает агент службы (это просто оболочка для внутренней службы WCF) через обычный синхронный вызов метода. Агент службы Inturn вызывает службу WCF, для которой настроена привязка пользователя с двоичным кодированием и httptransport. Эта служба WCF находится в том же приложении, что и Silverlight, и вызовы от агента службы выполняются с помощью асинхронных методов «operationame». В сервисном агенте есть пользовательские события, которые будут вызваны при вызове метода «операция» завершена. Это событие сервисного агента будет обработано Silverlight. Эта служба WCF снова выполняет вызов распределенной службы WCF с использованием асинхронного метода «operationame».

Мое приложение silverlight имеет четыре разных виджета на экране, и они делают четыре вызова сервисному агенту. Четыре вызова от агента службы запускаются параллельно с действующей службой WCF. Но из службы WCF, находящейся в процессе, вызовы выполняются последовательно для распределенной службы wcf. Я только что проверил с помощью fiddler, который показывает, что в процессе wcf выполняет последовательные вызовы распределенной службы wcf. Я хотел бы сделать это параллельно. Может кто-нибудь, пожалуйста, помогите. Проблема в том, что мой сервер обрабатывает их по одному, а не параллельно. Я подтвердил это через Fiddler, где я увидел, что звонки поступают в WCF последовательно. Распределенная служба WCF настроена как percall с параллельным режимом одиночного и привязки webhttp.

Также у кого-нибудь есть ресурс / ссылки, чтобы понять, как работает модель потоков silverlight / wcf. Мне интересно знать, вызывает ли вызов proxymethodAsync новый поток? Если нет, то как он работает без блокировки потока пользовательского интерфейса?

1 Ответ

4 голосов
/ 18 марта 2012

HTTP-вызовы (которые, я думаю, ваши WCF-вызовы выполняются) НЕ Асинхронны.

Ваш код вызывает асинхронный вызов, но среда выполнения Silverlight (или браузер) обрабатывает это соединение синхронно для вас. Только по возвращении он вызывает обратный вызов для вашего кода.

Существуют также ограничения на количество соединений, которые могут быть сделаны одновременно - это ограничение браузера и / или времени выполнения. Обычно лимит составляет два активных соединения.

Итак, если вам нужно сделать много звонков, вы должны свернуть их и отправить их на сервер в виде пакета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...