Службы WCF RIA ожидают одного потока? - PullRequest
0 голосов
/ 17 марта 2011

Может кто-нибудь объяснить мне, почему это происходит?

  1. Приложение Silverlight 4 с использованием WCF Ria Services
  2. Приложение SL вызывает StartLongOperation [Invoke] операция.
    Из-за проблем синхронизации с внешними компонентами в коде на стороне сервера Thread.Sleep(30 * 1000).

  3. Приложение SL вызывает GetStatus (стандартный запрос) операцию. Эти вызовы, по-видимому, заблокированы на стороне сервера и ожидают завершения StartLongOperation. Почему ??

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

1 Ответ

1 голос
/ 17 марта 2011

Поскольку все сетевое взаимодействие Silverlight происходит в потоке пользовательского интерфейса, одновременно может происходить только один вызов WCF. Это означает, что ваша StartLongOperation должен завершиться, и тогда клиент запустит вызов GetStatus. Если вы хотите проверить это поведение, запустите Fiddler . Вы обнаружите, что Silverlight не будет отправлять HTTP-запрос методу GetStatus, пока сначала не получит ответ StartLongOperation от сервера.

Так что проблема не в серверной части. Это ограничение Silverlight.

...