четверг, 26 августа 2010 г.

Какой сервис использовать в Silverlight?


Большинство Silverlight приложений используют различного рода сервисы для связи с внешним миром. Для таких задач, как работа с базой или обращение к серверной логике для осуществления каких-то вычислений это и вовсе практически единственно возможный способ. Сама же платформа Silverlight в процессе своего взросления получает поддержку все большего количества различных типов сервисов. Для непросвещенного программиста, который только знакомится с Silverlight крайне сложно определиться, что и когда стоит использовать. Данная статья призвана вкраце описать возможные типы поддерживаемых сервисов и попытаться помочь сделать осмысленный выбор.
Сервисы WCF и ASMX
При создании сервисов в .NET большинство разработчиков выберут WCF (Windows Communication Foundation). WCF появился в .NET 3.0 и был предназначен для упрощения процесса построения сервисо-ориентированных приложений. Целью данного программного фреймворка ялвяется унификация нескольких различных API взаимодейстия, таких как Remoting, "классические" веб-сервисы (ASMX) и так далее.
WCF получил широкое распространение и поэтому неудивительно что Microsoft предоставляет его поддержку и в Silverlight. В данный момент связка Silverlight - WCF является наиболее распространенной по сравнению с другими технологиями, предназначенными для реализации коммуникации приложений Silverlight с внешним миром. Если вы являетесь начинающим программистом, выбор WCF будет вероятнее всего наиболее предпочтительным.
ASMX или классические веб-сервисы также являются широко распространнеными. Их также можно использовать вместе с Silverlight, однако у него нету всех тех преимуществ, которые предоставляет WCF.
Еще Silverlight 2 обладал поддержкой дуплексного соединения через сервисы WCF. Однако, несмотря на то, что этот режим был возможным, он был трудно реализуемым. С появлением Silverlight 3 дуплексное взаимодействие с WCF через HTTP стало намного проще. Silverlight 4 добавил поддержку протокола net.tcp. И сегодня мы можем реализовать как однонаправленный так и двухнаправленный протокол взаимодействия с намного более высокой производительностю предоставляемой привязкой net.tcp.
Говоря о производительности, в Silverlight 3 была добавлена поддержка бинарного кодирования передаваемой информации, что в итоге приводило к более быстрой передаче данных. Также, появилась поддержка обработки сбоев. До появления Silverlight 3 происходившие сбои сервиса были невидимыми для Silverlight. Это вынуждало заниматься очень тяжелой отладкой. Сейчас такие ситуации – безвозвратно ушедшее прошлое.

 
REST и WCF Data Services
В то время как ASMX и WCF это очень мощные инструменты которые способны предложить решение практически для любой ситуации, иногда их использование бывает избыточным. Бывают такие случаи, что необходимо просто передавать текстовую информацию, как правило JSON (JavaScript Object Notation) или XML, от сервера к приложению Silverlight.
Протокол используемый для таких целей называется REST (Representational State Transfer). В сравнении с веб-сервисами (WCF или ASMX) REST обладает рядом преимуществ которые могут быть существенными для Silverlight. Передаваемой информацией является текст, удобный для чтения человеком, как правило в XML формате, не перегруженный излишней разметкой. Сообщения SOAP – формат веб-сервисов – также XML, но в пакете SOAP содержится много служебного XML который сильно затрудняет прозрачное понимание текста человеком. Использование REST приведет к тому, что по сети будет передано меньше информации, что в итоге положиетльно скажется на пропускной способности и производительности приложения. Таким образом, REST более легок для понимания и к тому же платформо-независим. Его использование не требует дополнительного программного обеспечения поскольку работает поверх стандартного HTTP протокола.
Являются ли сервисы RESTful (сервисы которые следуют принципам REST часто называются RESTful) трендом? На этот вопрос можно с уверенностью ответить положительно. Сегодня много больших веб-приложений, такие как Flickr, Facebook, Twitter, YouTube предлагают свои возможности благодаря использованию API RESTful (коллекции сервисов REST). .NET обладает исчерпывающей поддержкой RESTful сервисов. Silverlight может беспрепятственно использовать такие сервисы.

 
WCF RIA
Microsoft WCF RIA Services – это фреймворк, задачей которого является упрощение разработки RIA-решений. Сервисы RIA призваны решать вопросы сложности и несогласованности, которые могут возникнуть в процессе создания N-уровневой архитектуры приложения, основанной на использовании фреймворков, элементов управления и сервисов серверной платформы ASP.NET и клиентского Silverlight приложения.
Сервисы RIA делают простым процесс передачи данных от вашего сервиса к клиенту. Это происходит благодаря тому, что при написании сервисов, которые связаны с источниками данных (базы данных, отдельные пользовательские классы, Entity Model и т.д.) на серверной стороне, позже осуществляется  генерация этих элементов на клиентской стороне. В процессе генерации также создается необходимый контекст, методы и операции, необходмые для взаимодействия с требуемым сервисом. Таки образом, по своей сути сервисы WCF RIA – это серверная технология, которая отображает серверный код на клиенте используя WCF для коммуникации. В дополнение ко всему данный фреймворк делает возможным интегрировать валидацию и аутентификацию для используемых сервисов и передаваемых объектов.