При загрузке данных из БД возникает исключение InvalidOperationException с сообщением: Элемент коллекции должен быть пустым перед использованием ItemsSource. Знаю, что для заполнения DataGrid можно использовать коллекции Items или ItemsSource, но одновременно их использовать нельзя: если задано значение для свойства ItemsSource и в коде C# добавляется элемент в Items, возникает исключение. |
Разработка Silverlight-приложений
Цель
Освоить основные приемы разработки корпоративных Silverlight- приложений, обеспечивающих взаимодействие клиентской части с базой данных.
Введение в технологию Silverlight
Microsoft Silverlight является межбраузерной межплатформенной реализацией .NET Framework для представления содержимого мультимедиа и многофункциональных приложений для Интернета [ 11 ] . Технология Silverlight предназначена для создания приложений, выполняемых в браузерах и вне браузера под управлением разных операционных систем. Silverlight является подключаемым модулем для браузера, который формирует визуализацию приложения и представляет программный интерфейс [ 5 ] . При обращении к веб-странице, содержащей компоненты Silverlight, надстройка браузера выполняет код Silverlight и выводит компоненты в заданную область на странице. Технология Silverlight позволяет создавать страницы, содержащие интерактивную графику, векторную анимацию, средства воспроизведения аудио- и видеофайлов.
В [ 2 ] отмечается, что Silverlight имеет следующие преимущества:
- интеграция Silverlight в существующую платформу, за счет чего возможна разработка Silverlight-приложений на управляемом языке программирования (C# или VB.NET) с поддержкой основных компонент .NET Framework;
- возможность создания корпоративных приложений, имеющих эффективный интерактивный интерфейс близкий по функциональности к Windows-приложениям, и обеспечивающих работу, как в браузере, так и вне браузера;
- поддержка Silverlight в интегрированных средствах разработки, таких как Visual Studio 2010 и Expression Blend.
В технологии Silverlight используются надстройки браузера, которые обеспечивают следующие средства создания интерактивных приложений:
- двухмерное рисование с помощью фигур и контуров, которыми можно манипулировать на стороне клиента и добавлять интерактивность за счет реагирования на определенные события;
- широкий набор элементов управления, заимствованный из технологии WPF, с возможностью манипулирования стилями и шаблонами;
- анимация, основанная на временных интервалах, и позволяющая определять, что должно произойти и как долго это будет длиться;
- мультимедиа, предоставляющая средства воспроизведения медиафайлов WMA, WMV7-9, MP3 и VC-1;
- общеязыковая среда выполнения CLR, которая предоставляет полный набор базовых классов .NET;
- интернет, посредством которого Silverlight-приложения могут обращаться к традиционным веб-службам ASP.NET или Windows Communication Foundation (WCF), что позволяет объединять клиентский код с безопасными серверными процедурами;
- связывание данных, что предоставляет удобные способы вывода большого количества данных с помощью небольших фрагментов кода.
Технология Silverlight базируется на подмножестве модели WPF. Это обстоятельство определяет следующие общие для Silverlight и WPF особенности:
- для определения пользовательского интерфейса Silverlight используется разметка XAML, аналогичная используемой в WPF с тем же синтаксисом и возможностью связывания данных;
- использование многих базовых элементов управления, системы стилизации и механизма шаблонов;
- использование идентичных фигур, контуров и кистей для рисования;
- декларативная модель анимации, основанная на последовательности раскадровок, работающая также, как и анимационная модель WPF;
- использование класса MediaElement для воспроизведения аудио- и видеофайлов.
Для изучения технологии проектирования Silverlight- приложения будем испльзовать учебный пример с базой данных Person и приложением, которое реализует стандартные фунции:
- просмотр данных по сотрудникам;
- ввод данных по новому сотруднику;
- редактирование данных по сотруднику;
- удаление данных по сотруднику;
- поиск данных по сотруднику.
В общем случае корпоративное приложение состоит из клиентской и серверной частей. Серверная часть должна обеспечивать взаимодействие клиента с базой данных.
Проектирование серверной части приложения
Основой серверной части Silverlight- приложения является веб-сервер. В рамках веб-сервера создаются источники данных и службы, предоставляющие доступ к данным.
Взаимодействие приложения Silverlight с источником данных базируется на службе данных WCF и модели "сущность-связь" – Entity Data Model (EDM).
Концептуальная модель является специфическим представлением структуры некоторых данных в виде сущностей и связей. Одним из способов представления концептуальной модели является схема. На рис. 7.1 приведена схема концептуальной модели базы данных Person – "Персонал" с двумя типами сущностей ( Employee – Сотрудник и JobTitle –роль/должность) и одной ассоциативной связью 1:* (один ко многим).
Таблица Employee содержит данные по сотруднику. Атрибутами таблицы являются:
- EmployeeID – код сотрудника;
- JobRoleID – внешний ключ для связи с таблицей Title;
- EmployeeSurname – фамилия;
- EmployeeName – имя;
- EmployeePatronymic – отчество;
- EmployeeStatus – статус;
- Access – уровень доступа;
- NetName – сетевое имя;
- FirstDate – дата приема на работу;
- LastDate – дата увольнения.
Таблица JobTitle является справочником должностей, имеющихся на предприятии, и включает следующие атрибуты:
- ID – код должности;
- Title – наименование должности.
Разработку Silverlight-приложения, взаимодействующего с базой данных, начнем с конструирования EDM-модели данных. Для этого создадим новое веб-приложение ASP.NET с именем PersonService ( рис. 7.2).
В проекте будем использовать порт 12345. Для этого откроем окно свойств проекта и на вкладке Веб введем новый номер порта ( рис. 7.3).
Добавим в проект новый элемент – модель ADO.NET EDM, присвоив файлу модели имя Employee.edmx.
При завершении работы мастера создания EDM-модели в проект будет добавлен файл Employee.edmx ( рис. 7.4).
Службы WCF Data Services входят в состав библиотеки .NET Framework и состоят из набора шаблонов и библиотек. Они позволяют создавать службы данных и обращаться к ним в Интернете, интрасети или в приложении. Службы WCF Data Services предоставляют данные как ресурсы, адресуемые с помощью URI. Это позволяет обращаться к данным и изменять их с использованием семантики архитектурного стиля Representational State Transfer (REST), в частности стандартных команд HTTP, таких как GET, PUT, POST и DELETE.
Службы WCF Data Services взаимодействуют с сущностей модели EDM и предоставляют ресурсы в виде наборов сущностей и взаимосвязей между ними. Они позволяют предоставлять данные, происходящие из различных источников. Предоставлять реляционные данные в виде ресурсов можно, определив концептуальную модель с помощью Entity Data Model (EDM).
В состав служб WCF Data Services включен набор клиентских библиотек:
- для типовых клиентских приложений .NET Framework;
- для приложений на основе Silverlight.
Клиентские библиотеки предоставляют возможности объектно-ориентированного программирования для доступа к службам WCF Data Services из таких платформ, как .NET Framework и Silverlight.
Создание службы данных начнем с добавления в проект нового элемента – службы данных WCF, файл которой назовем WfcDataServicePerson.svc ( рис. 7.5).
В объявлении сгенерированного класса WcfDataServicePerson необходимо указать обобщенный тип PersonalEntities (EDM-модель) родительского класса DataService, то есть:
public class WcfDataServicePerson : DataService<PersonalEntities>
и права при работе с таблицами базы данных:
config.SetEntitySetAccessRule("Employees", EntitySetRights.All); config.SetEntitySetAccessRule("JobTitles", EntitySetRights.All);
Это обеспечивает авторизованным клиентам доступ к ресурсам указанных наборов сущностей.
Отредактированный класс службы данных будет иметь следующий вид:
public class WcfDataServicePerson: DataService<PersonalEntities > { public static void InitializeService(DataServiceConfiguration config) { config.SetEntitySetAccessRule("Employees", EntitySetRights.All); config.SetEntitySetAccessRule("JobTitles", EntitySetRights.All); config.DataServiceBehavior.MaxProtocolVersion = DataServiceProtocolVersion.V2; } }
Для тестирования запустим службу. Результаты выполнения приведены на рис. 7.6.
На этом создание службы данных завершено.