Синхронные вызовы веб-службы в Silverlight: Развенчание мифа об исключительной асинхронности
ОГЛАВЛЕНИЕ
В данной статье показывается, как выполнять синхронные вызовы веб-служб, и вводятся некоторые типы, облегчающие выполнение синхронных вызовов с помощью генерируемых посредников канала. Также дается беглый обзор среды блочного тестирования Microsoft Silverlight.
• Скачать SilverlightCore_01_00 - 169.74 KB
Введение
Silverlight предлагает интересную возможность изучить новую среду, где некоторые вещи, такие как асинхронная модель веб-службы, работают немного иначе, чем при разработке для настольной CLR. Вы могли слышать, что синхронные вызовы веб-службы невозможны в Silverlight.
На самом деле это не так. В данной статье показывается, как выполнять синхронные вызовы веб-служб, и вводятся некоторые типы, облегчающие выполнение синхронных вызовов с помощью генерируемых посредников канала. Также дается беглый обзор среды блочного тестирования Microsoft Silverlight.
Вначале некоторые читатели могут возразить, что синхронные вызовы веб-службы неуместны в приложении с графическим пользовательским интерфейсом, потому что они рискуют заблокировать поток пользовательского интерфейса, что приводит к неотвечающему пользовательскому интерфейсу, и т.д. Несмотря на то, что крайне важно не блокировать поток пользовательского интерфейса, чтобы сохранить отзывчивость приложения, есть оправданные доводы в пользу синхронных вызовов веб-службы в потоках, не относящихся к пользовательскому интерфейсу. После переноса проектов из 1.1 в Silverlight 2 оказалось, что не только асинхронная модель была трудной и лишней во многих ситуациях, но и пришлось пересмотреть архитектуру, чтобы она стала совместима с асинхронностью. Для сложных сценариев, где применяется фоновая обработка, обязательная асинхронная модель неизящна.
Почему бы не воспользоваться синхронными вызовами служб при работе не в потоке пользовательского интерфейса? Безусловно, настольная CLR позволяет их применять (WPF XBAP), почему не должна позволять Silverlight CLR?
Приемы, изложенные в данной статье, были найдены только после экспериментирования.