Wednesday, November 11, 2009

Silverlight RIA Services. Вопросы и ответы

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

Итак, я попробую ответить на эти вопросы в этой статье.

Вопрос 1. Можно ли получить доступ к произвольным данным в приложении RIA Services?

Что бы ответить на этот вопрос, необходимо совершить небольшой экскурс в архитектуру приложения. В большинстве случаев RIA Silverlight приложение состоит из двух частей: клиентской части и серверной части. в каждой из частей за доступ к данным отвечает свой класс: в серверной части – наследник DomainService, а в клиентской части – наследник DomainContext. При этом нужно понимать, что DomainContext является proxy классом, который генерируется VisualStudio автоматически, после изменения и перекомпиляции DomainService класса. Таким образом, забота разработчика состоит в том, чтобы определить состав данных, методы, реализующие выборку данных, а также, если нужно, методы выполняющие изменение данных. И еще, DomainService классов может быть как несколько, так и один.

Итак, начнем с определения состава данных. Состав данных определяется с помощью классов-сущностей (entity). При описании классов нужно придерживаться определенных правил:

  1. поля или свойства классов должны иметь один из сериализумых типов: символьные, числовые, логические и т.д.
  2. в состав передаваемых данных входят только public поля или свойства.
  3. Как минимум одно поле или свойство класса должно быть помечено атрибутом [Key].

Пример определения такого класса:

public class ClientClass
{
[Key]
public Guid ID { get; set; }
[Display(Name = "Наименование клиента", Description = "Поле для ввода наименования клиента")]
[StringLength(100, ErrorMessage = "Не больше 100 символов")]
public string Name { get; set; }
}

Свойства класса могут быть декорированы атрибутами из пространства имен System.ComponentModel.DataAnnotaion. Это декорирование определяет поведение визуальных компонентов, например DataForm в клиентской части приложения.


Второй этап – реализация методов выбора данных. Здесь также существуют довольно простые правила. Методы должны возвращать класс, который имеет реализацию интерфейса IQueryable, и методы должны быть членами класса – наследника DomainService. Примеры определения методов:

public List<GeneralInfo> GetInfo(DateTime dt)
public Collection<CreditRow> GetRows(DateTime dtb)
public IQueryable<CreditDetail> GetDetails(Guid RowID)


Как реализуется собственно выборка данных, из каких источников, с применением каких технологий – выбор разработчика. Могут быть применены сервисы WCF, вебсервисы, произвольные СУБД, вообще что угодно. Дело разработчика выбрать данные, сформировать из них один или несколько экземпляров класса-сущности и поместить их в результат.

Необходимо отметить еще один способ доступа к данным, который может быть применен в том случае, если необходимо вернуть, например, количество элементов в выборке. Заводить класс-сущность с одним единственным полем невыгодно, поэтому в этом случае можно применять сервисные операции. Что же такое сервисные операции? Это методы класса DomainService, которые помечены атрибутом [ServiceOperation], и которые могут возвращать простой тип. Пример объявления и реализации такого метода:

[ServiceOperation]
public int GetCount(DateTime dt)
{
return GetRows(dt).Count;
}
естественно, сервисные операции могут применятся не только для выбора данных, выбор данных – одна из возможных областей применения.

Третий этап – реализация методов редактирования данных. DomainService поддерживает три вида изменения данных:

  • Добавление
  • Редактирование
  • Удаление.

Разработчик должен реализовать соответствующие методы. Рассмотрим, как это делается. Чтобы класс знал, какие методы должны быть вызваны в случае редактирования или удаления эти методы должны быть объявлены в соответствии с соответствующими правилами. Правила таковы:

  • Для операции добавления название метода должно начинаться с префикса Add или Insert, либо метод должен быть помечен атрибутом [Insert]
  • Для операции редактирования название метода должно начинаться с префикса Update, либо метод должен быть помечен атрибутом [Update]
  • Для операции удаления название метода должно начинаться с префикса Delete, либо метод должен быть помечен атрибутом [Delete]

единственным параметром всех этих методов должен иметь тип соответствующего класса-сущности. То есть объявление метода, которые редактирует сущность будет выглядить примерно так:

public void UpdateOrderClass(OrderClass order)

Реализация методов – на усмотрении разработчика. Закончив все три этапа, можно сказать, что организация доступа к произвольным данным завершена.


Вопрос 2. У меня есть несколько таблиц в базе данных, я организовал доступ к данным с помощью ADO.NET Entity Model. Но мне нужно передать в клиентскую часть результат запроса, объединяющий две таблицы, причем не все поля из таблиц. Как это сделать?

Ответ находится в ответе на первый вопрос. Нужно объявить класс-сущность, в которой будут все необходимые поля и поместить результат запроса в экземрляры этого класса.

Вопрос 3. Когда я разрабатываю приложение, то под ASP.NET Development server у меня все работает, но когда я размещаю приложение на хостинге или на “боевом” сервере, то приложение в браузер загружается, а данных нет, никаких ошибок не видно. Что делать?

Ответ в том, что каждый раз надо рабираться с ситуацией. Основных причин, по крайней мере, две. Первая - приложение в IIS не сконфигурировано таким образом, чтобы запросы, ответы были в кодировке utf-16. Нигде об этом в прямую не написано, но это так.

Вторая причина кроется в серверной части. Скорее всего там происходит исключение, которой с успехом “проглатывается” и соответственно никаких данных в клиента не передается. Для того, что бы отловить – нужно сделать трассировку действий вашей серверной части, что бы отловить то исключение и то место, где оно возникает.

Вопрос 4. Что нужно, чтобы развернуть RIA Siverlight приложение?

Ответ прост. Нужен .NET Framework 3.5 SP1 Runtime, IIS6, IIS7, IIS7.5. Для IIS6 нужно прописать MIME типы для .xap, xaml. и xbap.

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

Wednesday, October 28, 2009

Silverlight webcast

Собственно вот, первый камень в огород webcast (http://www.smalldevteam.com/demo/default.html).

Тема: различные методы доступа к данным в приложениях Silverlight RIA Services

Принимаются предложения и замечания.

Tuesday, October 06, 2009

ASP.NET и Silverlight


Недавно пришлось сделать одно и то же на ASP.NET и RIA Silverlight. Силверлайт- рулит. Немного надо перестроиться для обеспечения доступа к данным, все-таки RIA сильверлайтовский - штука асинхронная, но по трудозатратам - несравнимо.


Можно говорить, что Silverlight - это замена Flash, которая не подходит для бизнес-приложений, и т.д., что нет этого на линуксе и прочих юниксах (что не совсем так, смотрите проект Moonlight). Но вот есть интересные такие результаты:





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


Естественно, нужно понимать, что RIA Silverlight - это слой представления, в который может быть перенесена и часть логики (при желании), но, фактически, backend-ом может быть что угодно. (смотрите несколько статей 1, 2, 3 Сергея Орлика) в том числе и облака. Точно можно сказать, что уж в Azure все это работает просто на ура. Правда Azure не доступен в РФ, в смысле за него нельзя платить в РФ, я так понимаю, что тут проблема не техническая, а на поле законодательства.



Monday, September 14, 2009

Кризис это отличная причина ничего не делать и ныть о том, что кризис и нет ничего в светлых тонах. А так же отличное время порезать зарплату и выгнать неугоднях людей. Задрало!

Saturday, August 15, 2009

Кризис среднего возраста

Скоро день рождения. И опять начинается хандра и самобичевание с целью узнать, чего достиг, и куда дальше двигаться. Блин, похоже, старым стал, кризис среднего возраста наступает J

В общем, сделал выводы, что мне надоела моя работа. Не вид деятельности, а именно место работы. Но тут опять палка о двух концах, хочется же, что бы все было шоколадно, во всяком случае, не хуже с деньгами, чем сейчас. А так бывает редко. Так что опять всплывает извечный русский вопрос…

Родные пристают с расспросами, что же мне подарить, а у меня как в Греции, все есть: несколько тубусов со спиннингами, приличный фотоаппарат и так далее J. К сожалению, новую работу они мне подарить не могут.

Sunday, June 07, 2009

Про стартапы 3

Итак, наш сервис http://www.smalldevteam.com выходит на стадию бета тестирования.

Работают сервисы управления ошибками (bug tracking) и сервис управления версиями. Скоро будет работать третья компонента – Task Management.

Работа с ошибками организована на сайте. А вот работа с системой управления версиями - с помощью отдельной утилиты, которая на днях будет доступна в разделе Downloads. Утилита требует первоначальной регистрации на сайте.


 

Описание ошибок, которые вы найдете (а они обязательно будут), присылайте на betareports@eadsoft.com

Friday, May 08, 2009

Про стартапы 2

Стартап потихонечку выходит из тени. Собственно вылез только самый маленький кусочек- http://www.smalldevteam.com

Желающие принять участие в бета-тестировании и/или имеющие предложения – оставляйте комментарии с координатами.

Tuesday, April 14, 2009

Про стартапы

Начитался и насмотрелся веселого кино про стартапы и решил попробовать все это на своей шкуре. Памятую про фразу, что «для стартапа нужно два друга, ноутбук, гараж и кредитка» решил пойти немного по другому пути. Ноутбук у меня есть, кредитка в общем – тоже, но тратить с нее деньги не стал. Первым, что озаботился это идеей, а потом лицензионной чистотой того, что задумал, а потом нашлись инвесторы J Они хоть и не миллионы дают, но на разработку денег хватит.

Лицензионная чистота оказалась очень несложным делом. Это программа BizSpark от Microsoft. Каких-то особых телодвижений не понадобилось, просто вменяемо объяснить, что я собираюсь делать.

В общем, ждите анонсов и бета-тестирования.

Думаю над тем, что бы писать дневник всего этого действа.

Friday, March 06, 2009

UI, как его надо делать

Хорошая штука – набор UI паттернов, практически на все случаи жизни.

http://quince.infragistics.com/

Wednesday, March 04, 2009

Сижу дома, болею

Сижу дома вторую неделю с пневмонией и занимаюсь самообразованием и самобичеванием. Пытаюсь ответить для себя на один из двух исконных российских вопросов J
Натолкнулся на один очень интересный документ, который, возможно, поможет ответить на этот вопрос.

Собственно документ вот он (http://habrahabr.ru/linker/go/53269/). Это небольшое исследование на тему, куда инвесторы готовы вложить деньги

Tuesday, January 27, 2009

Надоело о кризисе

Все о кризисе, да о кризисе. Надоело!! За этим кризисом просмотрел несколько интересных и, на мой взгляд, полезных вещей.

Live расширяется. Теперь доступен SkyDrive и, что более важно – Office Live, который сделан на основе Sharepoint. Немного конечно урезано, но для личного использования или для использования небольшой группой – просто отлично.
Я вообще большой поклонник SharePoint, и активно его использую в работе, не только как файловую свалку нового поколения, но и как средство совместной работы. И это становится понятным потому, что основная моя работа сейчас – работа клерка по сути своей , хоть это мне ОЧЕНЬ не нравится.
мы используем Sharepoint и как средство сбора и агрегации каких-то небольших и несложных форм, безо всяких сложных вещей вроде Forms Server и т.д. Все это без программирования и с удобной интеграцией с основным инструментом клерка – Outlook J