Синхронные вызовы веб-службы в Silverlight: Развенчание мифа об исключительной асинхронности

ОГЛАВЛЕНИЕ

В данной статье показывается, как выполнять синхронные вызовы веб-служб, и вводятся некоторые типы, облегчающие выполнение синхронных вызовов с помощью генерируемых посредников канала. Также дается беглый обзор среды блочного тестирования Microsoft Silverlight.

•    Скачать SilverlightCore_01_00 - 169.74 KB

Введение

Silverlight предлагает интересную возможность изучить новую среду, где некоторые вещи, такие как асинхронная модель веб-службы, работают немного иначе, чем при разработке для настольной CLR. Вы могли слышать, что синхронные вызовы веб-службы невозможны в Silverlight.

На самом деле это не так. В данной статье показывается, как выполнять синхронные вызовы веб-служб, и вводятся некоторые типы, облегчающие выполнение синхронных вызовов с помощью генерируемых посредников канала. Также дается беглый обзор среды блочного тестирования Microsoft Silverlight.

Вначале некоторые читатели могут возразить, что синхронные вызовы веб-службы неуместны в приложении с графическим пользовательским интерфейсом, потому что они рискуют заблокировать поток пользовательского интерфейса, что приводит к неотвечающему пользовательскому интерфейсу, и т.д. Несмотря на то, что крайне важно не блокировать поток пользовательского интерфейса, чтобы сохранить отзывчивость приложения, есть оправданные доводы в пользу синхронных вызовов веб-службы в потоках, не относящихся к пользовательскому интерфейсу. После переноса проектов из 1.1 в Silverlight 2 оказалось, что не только асинхронная модель была трудной и лишней во многих ситуациях, но и пришлось пересмотреть архитектуру, чтобы она стала совместима с асинхронностью. Для сложных сценариев, где применяется фоновая обработка, обязательная асинхронная модель неизящна.

Почему бы не воспользоваться синхронными вызовами служб при работе не в потоке пользовательского интерфейса? Безусловно, настольная CLR позволяет их применять (WPF XBAP), почему не должна позволять Silverlight CLR?

Приемы, изложенные в данной статье, были найдены только после экспериментирования.