Silverlight синхронные звонки в wcf - PullRequest
1 голос
/ 18 июня 2010

Я пытаюсь синхронизировать звонки.Но приложение silverlight блокируется при вызове метода endList.В простом консольном приложении я могу сделать асинхронную синхронизацию.Не удалось увидеть проблему.

  var svc = new WcfServiceClient();
  var ar = svc.BeginList(null, null);
  var result = svc.EndList(ar); <-- Silverlight hangs here
  listBox.ItemsSource = result;

Ответы [ 2 ]

2 голосов
/ 18 июня 2010

Silverlight не поддерживает синхронизацию вызовов.

Здесь - статья о синхронных вызовах веб-сервисов и обходном пути.

0 голосов
/ 18 июня 2010

Краткий ответ: Вы можете сделать это, если вы не в ветке Dispatcher, что-то вроде:

System.Threading.ThreadPool.QueueUserWorkItem(state =>
    {
        IAsyncResult asyncResult = svc.BeginSomething(null, null);

        if (!asyncResult.CompletedSynchronously)
        {
            asyncResult.AsyncWaitHandle.WaitOne();
        }

        try
        {
            svc.EndSomething(asyncResult);
        }
        catch
        {
            throw;
        }
        finally
        {
            asyncResult.AsyncWaitHandle.Close();
        }
    });

Большим преимуществом этого является то, что вы можете поддерживать уровень модели вашего домена синхронно, как в старые времена, вы можете легко выполнять отложенную загрузку и т. Д. *

Но на практике вы можете использовать его только при разработке приложения для строгого соблюдения MVVM / Командных шаблонов, где обрабатываются ваши ViewModels и Commands переключение между нитью диспетчера и нитями модели. Это большая работа, и есть некоторые ошибки, но когда это работает, это работает чудесно.

Если вы хотите использовать готовую платформу, которая работает аналогично, она доступна здесь: CodeProject: Представление шаблона потока представления потока модели . Архитектура также очень хорошо объяснена на этой странице.

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