WCF — Ria Services
WCF RIA Service is a higher-level framework and a new component of frameworks like .NET 4 and Silverlight 4 that eases the procedure of building a complex business application in Silverlight by offering client-side validation. RIA stands for Rich Internet Applications.
It must be noted here that Silverlight is a framework offered by Microsoft, ideal for rich internet applications and is available for use as a browser plug-in, just like Adobe Flash.
WCF RIA Service is mainly based on the standard version of WCF service. The following figure illustrates a part of the WCF architecture, where WCF RIA services has its focus in general.

Creating a WCF RIA Service is the next step to have a better understanding of the concept. The step-by-step procedure is given below.
Step 1 − Create a new web project of the name SLWCFRiaServices.Web using Silverlight 5 and then add a new item by selecting ADO.NET Entity Data Model to the same.

Step 2 − Now choose model contents from the Entity Data Model Wizard by generating the model from the database.

Step 3 − From the same wizard, choose your data connection and database objects.

Step 4 − Build the solution so that in future, recognizing the data model will not a problem for the domain service you are going to create.

Step 5 − Now create a domain service in the web project by adding a new item and make sure to enable client access.

Step 6 − In the very next step, some classes will be generated and it is essential to build them again.

Step 7 − In this step, DataDomainContext is displayed by the Data Sources Panel.

Step 8 − In this step, the article below the DataDomainContext should be selected and customized.

Step 9 − Attaching the DataGrid Control with the Data Source is the step committed here, along with selection of themes. Here BureauBlue theme has been selected.

Step 10 − The last and the final step comprises of going to the design screen and adding entity in the layout area of the MainPage by simple drag and drop. It is also vital to ensure AutoGenerateColumns = «True» and to run it to view the output.

Prerequisites
There are some prerequisites for experiencing the full potential of WCF RIA services −
- Visual Studio 2010 / Visual Studio 2012
- Silverlight Developer Runtime
- Latest version of RIA Services Toolkit
- SDK (Software Development Kit)
WCF RIA Domain Service
A domain service comprises of a set of data operations related to business. It is nothing but a WCF service that exposes any WCF RIA Service application’s business logic.
A WCF RIA Domain Service has the hosting class DomainServiceHost internally, which in turn uses the WCF ServiceHost class for hosting the application. To make the domain service accessible for the client project, it should have the EnableClientAccessAttribute attribute. The attribute is applied automatically whenever a new domain service class is added.
The following figure shows the architecture of a WCF RIA Domain Service −

WCF RIA Services – Querying Data
The following figure shows how a query is created on the client side and executed on the server side to return queryable results. DAL stands for Data Access Layer.

WCF RIA Services – Updating Data
The following figure shows how data is updated by executing the CUD (Create Update Delete) operation on the server side. It should be noted here that WCF RIA service is always stateless on the server side.
Русские Блоги
Чтобы использовать Silverlight для разработки систем приложений уровня предприятия, необходимо иметь дело с базой данных. Когда вы начнете использовать Silverlight для разработки приложений тонких клиентов корпоративного уровня, вы обнаружите, что Silverlight не предоставляет никаких объектов для непосредственного взаимодействия с базой данных. Это связано с тем, что Silverlight является только клиентской платформой, предназначенной для работы в браузере, поэтому клиенты могут запускать приложения через подключаемый модуль Silverlight где угодно. Очевидно, что бессмысленно предоставлять клиенту браузера прямой доступ к базе данных, и это также опасно (большинство баз данных в настоящее время размещаются за брандмауэрами).
Так как же клиент Silverlight получает доступ к базе данных? В более ранних версиях Silverlight использовались такие технологии, как веб-службы, позволяющие клиентам получать доступ к содержимому базы данных через границы приложений, вызывая веб-службы ASP.NET. Кроме того, WCF в настоящее время является самой популярной серверной технологией, вы можете использовать Silverlight для взаимодействия с WCF для получения данных базы данных. Хотя вы можете использовать службу WCF для работы с базой данных, создание и поддержка службы WCF станет немного громоздким, в основном потому, что для этого потребуется много повторяющегося и аналогичного кода. При добавлении таких функций, как фильтрация / сортировка / группировка / разбиение на страницы в базе данных, Это станет очень сложным, потребует постоянного обновления ссылок на стороне сервера и заставит разработчиков писать и поддерживать логику на стороне сервера и на стороне клиента, такую как логика проверки и бизнес-правил.
Чтобы решить эти проблемы и упростить доступ приложений Silverlight к базам данных, Microsoft представила новую технологию под названием WCF Ria Services (широко известную как службы RIA), которая специально разработана для предоставления приложениям Silverlight доступа к базам данных (в будущем они также будут использоваться для других Технология презентационного слоя).
3.1 Введение в WCF Ria Services
Служба RIA — это уровень, построенный поверх WCF, который предоставляет общие шаблоны и структуры для создания приложения на основе базы данных на основе Silverlight, так что клиент может легко манипулировать данными на стороне сервера. Можно также сказать, что служба RIA упрощает обработку сервера Способность предоставлять данные на стороне клиента и предоставлять возможность обмениваться бизнес-логикой на стороне клиента и сервера, предоставляет ряд моделей разработки и предоставляет платформу для упрощения разработки драйверов данных Silverlight.
3.1.1 Что такое WCF Ria Services
В настоящее время большинству прикладных систем уровня предприятия требуется обрабатывать большой объем данных базы данных, и данные передаются взад и вперед между сервером и клиентом. Для приложения с классической архитектурой C / S, когда клиент запрашивает данные с сервера, некоторая обработка выполняется на клиентском интерфейсе, а затем измененные данные передаются обратно на сервер. Сервер будет использоваться для обновления базы данных. данные.
Большинство современных прикладных систем используют распределенную архитектуру. Вся система состоит из нескольких независимых уровней (уровней или уровней). Наиболее популярной является трехуровневая архитектура. Эта архитектура делит всю систему на уровень представления, уровень бизнес-логики и Слой обработки данных. Уровень представления и средний уровень бизнес-логики не могут напрямую обращаться к базе данных. Одна из проблем этой архитектуры заключается в том, что для эффективной передачи данных между различными уровнями требуется более сложная базовая структура, и один и тот же код может появляться между несколькими уровнями (например, проверка в классах данных, бизнес-правила). И бизнес-логика), необходимость в повторяющемся коде добавляет дополнительную нагрузку, а также создает много потенциальных проблем. Службы RIA предназначены для решения этой проблемы, поэтому разработчикам нужно сосредоточиться только на решении реальных бизнес-проблем и не слишком заботиться об архитектурных проблемах.
Часть службы RIA создает приложения Silverlight на основе шаблонов проектирования центров обработки данных, часть — это структура, которая обеспечивает расширенные функции управления данными, включая функции проверки подлинности / авторизации и запросов, а также автоматическую генерацию кода. Позволяет синхронизировать код, написанный в одном проекте, с другим проектом (по ссылке RIA). Эти функции основаны на услуге WCF и обеспечивают механизм связи между средним уровнем и уровнем представления данных. Общая архитектура показана на рисунке 3.1.
Рисунок 3.1 Архитектура системы обслуживания RIA
В центре внимания модели обслуживания RIA находится в основном на среднем уровне, который не привязан к конкретной технологии доступа к данным. Но он тесно интегрирован с Entity Framework и LINQ to SQL (требует установки WCF RIA Services Toolkit). Более того, модель сервиса RIA не привязана к конкретной технологии уровня представления, хотя в настоящее время ее основной задачей является Silverlight, который имеет ограниченную поддержку других платформ уровня представления.
Служба RIA — это комплексная технология, требующая полного контроля над приложением на стороне клиента и сервера. Если вам нужен доступ к существующим службам или использовать службы, разработанные другими командами, службы RIA могут быть немного неподходящими.
Хотя основное внимание в этой книге уделяется использованию службы RIA для предоставления данных и логики на сервере, приложение Silverlight не ограничивается этой технологией, а некоторые другие коммуникационные технологии будут представлены позже. Многие концепции, представленные в этой книге, очень подходят для создания приложений уровня предприятия даже без использования служб RIA.
Каркасная часть службы RIA предоставляет большое количество дополнительных функций, значительно упрощающих связь между уровнем представления и промежуточным уровнем, содержит элемент управления источником данных, может связываться со стороной сервера декларативным способом в XAML, данные клиента Управление изменениями, чтобы серверная сторона могла обрабатывать его, писать запросы LINQ на стороне клиента и фактически выполнять запросы на стороне сервера, а также функции аутентификации на основе членских и ролевых служб ASP.NET.
3.1.2 Как WCF Ria Services генерирует код клиента
Служба RIA требует, чтобы проекты на стороне сервера и на стороне клиента находились в одном решении и были связаны через канал службы RIA. На стороне сервера содержатся сервисы, которые предоставляют данные, а клиент обрабатывает данные, связываясь с этими сервисами.
Службы, написанные на стороне сервера, должны следовать шаблону проектирования службы RIA В Visual Studio задача построения службы RIA включает в себя создание соответствующего кода на клиенте (процесс генерации кода). Это упрощает связь с сервером, а также отвечает за создание соответствующих прокси-объектов данных на клиенте. Эти объекты обычно представляют собой так называемые «сущности», открытые между серверами. Атрибуты применяются к этим классам сущностей и их атрибутам, таким как некоторая логика проверки. И непосредственно скопирует код на стороне сервера, помеченный как общий, с сервера на клиент (файл, помеченный как .shared.cs). Генерацию кода также обычно называют «проекцией», поскольку код проецируется непосредственно с сервера на клиент.
Посмотрите, что происходит за кулисами при использовании сервисов RIA для соединения двух проектов. Во-первых, используйте проект бизнес-приложения Silverlight для создания приложения с поддержкой службы RIA, выполнив следующие шаги:
(1) Откройте Visual Studio 2010, выберите «Новый проект», выберите проект «Silverlight | Silverlight Business» в установленном шаблоне и назовите проект ShowCodeGenerateDemo, как показано на рисунке 3.2.
Рисунок 3.2 Создание бизнес-приложения Silverlight
(2) После нажатия кнопки «ОК» Visual Studio автоматически создаст два проекта, один из которых является серверным проектом ASP.NET с именем ShowCodeGenerateDemo.Web, а другой — клиентский проект с именем ShowCodeGenerateDemo, эти два проекта Связанные через ссылку службы RIA, вы можете щелкнуть правой кнопкой мыши проект Silverlight, выбрать пункт меню «Свойства» во всплывающем меню, вы можете увидеть ссылку службы WCF RIA из свойств проекта, как показано на рисунке 3.3.
Рисунок 3.3 Сервисная ссылка WCF Ria
Сначала выберите клиентский проект ShowCodeGenerateDemo в обозревателе решений, нажмите кнопку «Показать все файлы» на панели инструментов (расположена во втором положении кнопки слева от решения), вы увидите серую папку Generated_Code, Вот расположение кода, сгенерированного задачей сборки службы RIA, как показано на рисунке 3.4.
Рисунок 3.4 Местоположение генерации клиентского кода Silverlight
Эти коды записываются в WEB-проекте и будут автоматически генерироваться при компиляции проекта Silverlight. При изменении кода на стороне сервера эти изменения будут немедленно перенесены в Silverlight, чтобы клиент мог написать код. Если он не был передан немедленно, его также можно редактировать. Форсировать код. Эти сгенерированные коды позволяют пользователям получать доступ к операциям и данным, предоставляемым сервером через службу RIA на стороне клиента.
Примечание. Разработчики могут просматривать сгенерированный код, но не пытаться изменить код, поскольку код будет перезаписан при следующей компиляции проекта Silverlight. Эти сгенерированные классы являются частичными классами, которые позволяют разработчикам расширяться на стороне клиента для создания клиентской логики, которая будет подробно описана ниже в этой главе.
Генератор кода может интеллектуально определять типы операций на стороне сервера, и используемая им логика будет представлена в разделе «Операции с доменом».
Разработчики могут контролировать создание классов сущностей в клиентском проекте, отмечая различные свойства для атрибутов класса сущностей, например, какие атрибуты могут включаться или не включаться. Будет введен в разделе измененного объекта.
Если вы хотите совместно использовать код между сервером и клиентом (код использует задачу сборки службы RIA для копирования из серверного проекта в клиентский проект), эти файлы должны иметь расширение .shared.cs, чтобы задача сборки могла копировать с сервера. Эти файлы включены в клиентский проект.
3.1.3 Как использовать WCF Ria Services
В этом разделе я кратко расскажу о процессе разработки с использованием сервисов RIA и подробно расскажу о каждой части позже.
1. Создайте связь между Silverlight и веб-проектом.
Использование сервисов RIA требует от разработчиков следовать шаблону при создании приложений. Во-первых, серверный проект и клиентский проект должны быть связаны между собой, чтобы генератор задач / задачи построения службы RIA мог проецировать код из сервисного проекта в клиентский проект и создавать вспомогательные объекты для взаимодействия с сервером. Это означает, что клиентский и серверный проекты должны быть в одном решении.
Примечание: Вы также можете отделить классы сущностей и метаданных от веб-проекта в отдельный проект, используя шаблон проекта библиотеки классов обслуживания WCF RIA.
2. Создайте доменные службы
Следующим шагом является создание одной или нескольких доменных служб. Учтите, что доменная служба очень похожа на стандартную службу WCF, но следует заданному шаблону (состоящему из некоторых основных функций).
Примечание: Фактически, каждая служба домена является стандартной службой WCF. Служба RIA автоматически генерирует проекции кода на клиенте для связи с сервером, что означает, что разработчикам не нужно обращать внимание на работу по добавлению ссылок на службы домена. Однако, поскольку служба домена является стандартной службой WCF, разработчики могут добавить ее в качестве ссылки на службу в проекте (например, для создания клиента WPF или ASP.NET для приложения).
Задача построения службы RIA автоматически генерирует код в клиентском проекте для взаимодействия с сервером домена, создает контекст домена для каждой службы домена и создает прокси-класс для класса сущностей, предоставляемого службой домена.
3. Создание доменных операций в доменных службах
На этом шаге создаются доменные операции в доменной службе, которые обычно используются для предоставления данных клиенту и получения изменений, внесенных клиентом в режимах «Создать», «Чтение», «Обновление» и «Удалить» (CRUD).
Объектные объекты серверных проектов, предоставляемые доменными службами, могут быть украшены функциями (такими как поиск правил проверки), они могут применяться напрямую или с помощью класса метаданных. Разработчики используют расширение .shared.cs для совместного использования кода на клиенте и сервере.
4. Используйте полевые услуги
После настройки серверной части и предоставления данных из службы домена разработчики могут сосредоточиться на клиентском проекте, чтобы вызывать операции в службе домена и использовать данные на стороне сервера. Разработчики могут взаимодействовать с доменными службами, создавая экземпляр DomainContext и вызывая публичные операции. Кроме того, разработчики также могут использовать элемент управления DomainDataSource для декларативного взаимодействия со службами домена с использованием декларативного кода XAML.
Объекты обычно предоставляются с помощью доменной операции, которая предоставляется с помощью выражения IQueryable <T> или в виде набора IEnumerable. Возвращая выражение IQueryable <T>, сервисная структура RIA позволяет разработчикам писать запросы LINQ на клиенте, чтобы фильтровать, группировать и публиковать требуемый набор объектов результатов. Служба RIA сериализует запрос LINQ и отправляет выражение на сервер.Прежде чем выражение будет выполнено, выражение, отредактированное этими клиентами, будет добавлено к выражению на стороне сервера. Это позволяет фильтровать, сортировать, группировать и выгружать коллекции на стороне сервера без необходимости передавать всю коллекцию обратно клиенту для выполнения этих операций на стороне клиента, что уменьшает объем передачи данных.
Когда этот набор обновляется на клиенте, контекст домена, который предоставляет данные (DomainContext), будет поддерживать набор изменений, который содержит объекты, которые были вставлены, удалены и обновлены. Управление коллекциями изменений — это очень мощная функция, предоставляемая сервисной средой RIA, которая значительно упрощает управление коллекциями и отправляет на сервер только обновленные записи. Метод SubmitChanges в контексте домена отправляет централизованные изменения объекта на сервер, и эти изменения автоматически вызывают операции вставки, обновления и удаления на стороне сервера для обновления соответствующей фоновой базы данных.
Обсуждение вышеупомянутых четырех пунктов затрагивает несколько очень широких аспектов разработки RIA, которые относятся к основным концепциям развития службы RIA. Следующее содержание подробно расскажет о конкретной реализации этих концепций.
3.2 Актуальные бои развития WCF Ria Services
В предыдущем разделе мы познакомились с некоторыми концепциями и процессами разработки WCF Ria Services. В начале этой главы мы проведем вас через дело, чтобы глубже понять все аспекты разработки WCF Ria Services.
3.2.1 Использование шаблона проекта бизнес-приложения Silverlight
В приведенном выше разделе был создан проект с именем ShowCodeGenerateDemo с использованием шаблона проекта бизнес-приложения Silverlight. Вы можете видеть, что проект автоматически использует службы RIA и предоставляет основные функции для использования служб RIA. Для серверного проекта он содержит папку с именем Services и папку Models, как показано на рисунке 3.5.
Рисунок 3.5 Структура на стороне сервера шаблона бизнес-приложения Silverlight
Папка «Службы» содержит содержимое службы WCF, а шаблон проекта автоматически содержит 2 службы домена:
Служба AuthenticationService: предоставляет службу проверки подлинности, которая объединяет службы члена и роли ASP.NET для предоставления служб проверки подлинности и авторизации клиентам Silverlight.
Сервис UserRegistrationService: предоставляет стандартные доменные сервисы для регистрации пользователей.
Папка Models содержит содержимое модели, которое содержит 2 класса данных. Эти 2 класса будут передаваться между сервером и клиентом. В папке Models вы увидите общую папку, которая содержит Файл с именем User.shared.cs содержит файлы, которые будут совместно использоваться клиентом и сервером.
Поскольку клиент Silverlight и веб-проект уже связаны (ссылка на службу не RIA), целью этой ссылки является автоматическое копирование скомпилированного файла XAP, созданного приложением Silverlight, в проект веб-службы. Однако службе RIA необходимо создать другие связи между двумя проектами. Назначение ссылки на службу RIA состоит в том, чтобы настроить службы, включенные в проект, таким образом, чтобы клиентское приложение Silverlight могло использовать эти службы, что заставит задачу построения службы RIA сгенерировать необходимый код на клиенте Silverlight для связи с сервером.
Примечание. Разница между этими двумя ссылками заключается в том, что ссылка для настройки копии XAP находится на странице свойств веб-проекта, а ссылка для настройки службы RIA — на странице свойств Silverlight. Если в проекте уже есть проект на стороне веб-сервера ASP.NET, который предоставляет службы RIA, вы можете связать его, выбрав существующий проект в раскрывающемся списке ссылок RIA в свойствах проекта Silverlight.
3.2.2 Использование Entity Framework для создания слоя доступа к данным
После понимания ключевых моментов знания на стороне сервера и стороне клиента Служб RIA WCF, давайте создадим пример, чтобы понять эти основные понятия, и использовать Microsoft Entity Framework для создания уровня доступа к данным на стороне сервера.
Для завершения этого примера вам понадобится образец базы данных AdventureWorkds2008 OLTP, которую можно загрузить по следующему URL:
Для получения и сохранения данных базы данных в примере будет использоваться Entity Framework в качестве уровня доступа к данным. Entity Framework (в дальнейшем именуемый EF). EF — это инструмент объектно-реляционного отображения (ORM), который позволяет разработчикам создавать концептуальные модели данных (то есть модели объектов) для сопоставления со схемами базы данных (такими как таблицы, представления и хранимые процедуры). Используйте LINQ to Entities для запроса для запроса модели данных объекта.
EF преобразует запрос LINQ to Entities в запрос SQL базы данных, а затем возвращает объективированные данные, определенные в модели.Использование EF позволяет разработчикам манипулировать базой данных с помощью объектно-ориентированного мышления, редактировать запросы строгого типа на основе модели сущностей и т. Д. Для получения дополнительной информации о EF, вы можете обратиться к соответствующей информации.
Использование мастеров Visual Studio 2010 позволяет разработчикам легко создавать твердотельные модели. Щелкните правой кнопкой мыши проект веб-службы ASP.NET, выберите пункт меню «Добавить | Новый элемент» и выберите элемент «Модель данных объекта ADO.NET» в поле данных установленного шаблона. Как показано на рисунке 3.6.
Рисунок 3.6 Создание модели данных объекта
После нажатия кнопки «Добавить» в Visual Studio 2010 появится мастер создания твердой модели, выберите элемент «Создать из базы данных» на странице выбора содержимого модели и нажмите кнопку «Далее». Создайте соединение с базой данных AdventureWorks_Data.mdf на странице «Выбор соединения с базой данных», как показано на рисунке 3.7.
Рисунок 3.7 Выбор соединения с базой данных
На странице «Выбор объектов базы данных» выберите таблицу «Продукт» под узлом таблицы и нажмите кнопку «Готово». Visual Studio 2010 создаст модель данных сущности и откроет окно конструктора сущностей.
3.2.3 Создание службы домена
После создания уровня доступа к данным следующим шагом является создание службы домена, которая предоставляет данные и операции клиенту. Доменная служба обычно состоит из серии операций CRUD и может содержать любые другие операции, которые разработчик желает раскрыть.
1. Понять жизненный цикл доменного сервиса
Во-первых, давайте посмотрим на методы работы доменных сервисов и жизненный цикл различных этапов доменных сервисов. Ядро взаимодействия между клиентом и службой домена состоит в том, чтобы получить коллекцию объектов (или один объект) с сервера, а затем вернуть любые объекты, которые были изменены, или другие объекты, вставленные в коллекцию, для обновления соответствующей базы данных (это включает CRUD операция). Эти измененные объекты будут помечены клиентом и отправлены обратно на сервер домена. Вместе с операциями домена, которые должны применяться к каждому объекту, будет использоваться как набор изменений (когда вызывается метод SubmitChanges, клиентом является метод SubmitChanges. Метод в объекте контекста домена, созданный проектом и связанный со службой домена.
В доменной службе будет вызван метод Submit, который запустит жизненный цикл доменной службы. Доменная служба пройдет следующие этапы по порядку:
(1) Стадия проверки полномочий на изменение набора:Используется для проверки того, что пользователь, который передал набор изменений, авторизован для выполнения операций с набором изменений. Он проверяет, разрешена ли каждая операция, вызванная из этого набора изменений, что достигается проверкой правил безопасности, определенных в каждой операции (то есть правил безопасности, измененных синтаксисом функции).
(2) Проверьте этап набора изменений:Проверка набора изменений на стороне сервера завершается в соответствии с правилами проверки, измененными характеристиками проверки в наборе объектов. Даже если объект и его атрибуты проверены клиентом, служба домена выполнит проверку на стороне сервера в соответствии со своими правилами проверки, чтобы не допустить, чтобы кто-то пропустил правила проверки клиента на клиенте.
(3) Выполните фазу изменения набора:После того, как набор изменений будет проверен и авторизован, следующим шагом будет переход на фазу выполнения, которая будет проходить через каждую сущность в наборе изменений, а затем вызывать определенные методы домена (такие как вставка, обновление и удаление или пользовательские операции в доменной службе). ,
(4) Стойкие изменения установить этап:Это последний этап доменных служб, то есть этап сохранения данных в базе данных. В зависимости от используемого уровня доступа к данным вызываются различные методы. Например, Entity Framework будет использовать метод SubmitChanges для отправки изменений обратно в базу данных.
Эти этапы будут выполнены самой службой домена. В то же время в доменной службе предусмотрены соответствующие методы, позволяющие разработчикам выполнить перезагрузку для обеспечения некоторых пользовательских режимов.
Конечно, разработчики могут также перегружать метод Submit, который включает в себя все эти этапы. На каждом этапе будет проходиться каждый объект в наборе изменений. Если какой-либо из объектов выдает исключение (независимо от того, на каком этапе), то Вся передача набора изменений будет отменена.
2. Создайте доменную службу в Visual Studio 2010
Если вы не редактировали проект с момента создания коллекции сущностей Entity Framework, сначала скомпилируйте проект сервера. После изучения соответствующих знаний о доменных службах следующим шагом будет изучение создания доменных служб в Visual Studio.
(1) Щелкните правой кнопкой мыши папку «Службы» проекта веб-службы, выберите во всплывающем меню пункт «Добавить | Новый элемент» и выберите шаблон «Веб | Класс службы домена» во всплывающем окне. Назовите его ProductService.cs, как показано на рисунке 3.8.
Рисунок 3.8 Создание класса обслуживания домена
(2) После нажатия кнопки «Добавить» вы войдете в окно «Добавить новый класс обслуживания домена», как показано на рисунке 3.9.
Рисунок 3.9 Добавление нового окна класса обслуживания домена
В доступном раскрывающемся списке DataContext / ObjectContext в этом диалоговом окне выберите созданный ранее набор сущностей Entity Framework. Если вы хотите использовать тип POCO в проекте вместо использования типа EF или LINQ to SQL, вам нужно выбрать параметр <пустой класс службы домена>, а затем самостоятельно выполнить операцию домена. Нажмите кнопку «ОК», Visual Studio создаст 2 файла CS в папке «Службы», в следующем разделе будет представлена конкретная роль каждого параметра на рисунке 3.9.
3.2.4. Понимание добавления параметров службы домена
Возвращаясь к рисунку 3.9, список объектов позволяет разработчикам выбирать объекты, которые они хотят предоставить через доменные службы. Каждый раз, когда объект выбирается, создается операция домена. Эта операция возвращает клиенту соответствующий набор объектов. Если разработчик хочет, чтобы клиент изменил объект, например, добавил, изменил и удалил, выберите рисунок 3.9. Флажок «Разрешить редактирование» справа от среднего объекта. Для каждого объекта, который разрешает редактирование, мастер создает операции домена для вставки, обновления и удаления.
Помимо уделения внимания редактированию этой опции, давайте взглянем на роль нескольких других опций на рисунке 3.9:
1. Разрешить клиентский доступ
Убедитесь, что установлен флажок «Разрешить клиентский доступ», который будет использоваться для украшения службы домена с помощью функции EnableClientAccess, которая указывает, что инструмент создания кода службы RIA должен генерировать код в клиентском проекте Silverlight, чтобы разрешить доступ к службе домена на стороне сервера.
2. Откройте конечную точку OData
Если этот флажок установлен, доступ к доменным службам можно получить с помощью Open Data Protocol (Open Data Protocol (OData) — это веб-протокол для запроса и обновления данных). OData — это набор расширений для разветвителя ATOM, используемый для стандартизации создания служб данных на основе HTTP. Подобно службе данных REST, данные возвращаются в виде начального числа ATOM и обеспечивают операции CRUD над данными.В настоящее время это новый синоним. Он имеет опыт работы в Microsoft, и Microsoft интегрировала OData в ряд продуктов, таких как SharePoint и PowerPivot.
3. Генерация связанных классов метаданных
Создать класс метаданных Этот флажок создаст связанный класс метаданных для каждой сущности, выбранной в списке сущностей. С помощью класса метаданных программисты могут использовать декларативный синтаксис для определения правил проверки данных для сущностей без изменения самого класса сущности. Будет перезаписано, и класс метаданных может избежать этой проблемы, изменив класс сущности в отдельном файле.
Каждый объект может иметь соответствующий класс метаданных, а каждый атрибут в объекте имеет соответствующее поле в классе данных элемента. Используя атрибуты в классе метаданных для изменения этих полей, служба RIA преобразует эти метаданные. Характеристики генерируются для клиента.
Мастер класса обслуживания домена может сгенерировать класс метаданных для объекта, выбранного программистом. Этот класс имеет расширение .metadata.cs. Например, для доменной службы ProductService будет создан соответствующий файл ProductService.metadata.cs.
Конечно, нет необходимости создавать классы метаданных для классов сущностей. Если вы забыли создать классы метаданных в мастере, вы можете вручную создать их при необходимости или создать другую службу временного домена, выбрать эти сущности и затем использовать сгенерированные Метаданные класса и удаление доменных служб.
3.3 Создание доменных операций
Доменные операции — это методы, которые могут вызываться клиентами в доменных службах. Обычно это операции CRUD, но программисты также могут создавать другие операции вызова и пользовательские операции. Чтобы генератор кода службы RIA мог понять, какой тип операции используется данным методом, чтобы сгенерировать правильный код на клиенте, он использует подход, основанный на соглашении, для определения, это соглашение описывает, как должен называться метод операции. И соглашения подписи, которые должны соблюдаться.
Кроме того, разработчики также могут использовать характеристики, чтобы указать, к какому типу операции относится метод операции. Фактически, программисты могут предпочесть использовать характерные методы, чтобы указать тип операции. Этот раздел познакомит вас с этими подробностями операций с доменом.
3.3.1 Операция запроса
Операция запроса позволяет раскрывать данные клиенту.Данными могут быть объект или совокупность объектов или один объект-объект с нулевой точкой. Операция запроса вводится в следующих двух аспектах.
1. Вернуться к коллекции объектов
После создания класса ProductServices с помощью мастера вы можете увидеть операцию запроса, которая возвращает коллекцию, как показано в следующем коде:
Операция GetProducts возвращает выражение типа IQueryable <T>, которое выполняется поставщиком LINQ и возвращает коллекцию сущностей Product. Используйте Entity Framework в качестве поставщика LINQ в этом разделе. Возврат выражения IQueryable <T> вместо объекта коллекции дает много преимуществ. Возвращает выражение (это выражение не выполняется поставщиком LINQ), позволяет службе RIA добавлять другие условия запроса к выражению, а затем возвращает результат клиенту, клиент может указать фильтрацию, сортировку, группировку и разбиение на страницы для выражения Условия. Когда вызывается операция запроса, запрос LINQ сериализуется и отправляется на сервер. Эти условия будут добавлены к существующему запросу до его выполнения. После выполнения запроса результат запроса возвращается клиенту. Это обеспечивает краткий, простой и элегантный способ передачи запросов от клиента к серверу для получения данных на стороне сервера.
Операция запроса может получать параметры как часть своей подписи, и разработчики могут использовать параметры фильтра или другие условия для операций запроса. Например, следующий запрос получает строку для фильтрации результатов:
2. Возвращает одну сущность
В дополнение к возвращению коллекции сущностей, программисты обычно хотят добавить операцию, которая возвращает единственную сущность. Эта операция включает параметр, чтобы возвратить единственную сущность, которая соответствует указанному параметру. Добавьте метод с именем GetProduct в ProductServices, чтобы возвратить совпадающую сущность, как показано в следующем коде шоу:
3.3.2 Соглашение об именовании операции запроса
Соглашения об именах для операции запроса не существует. Она может принимать любые параметры или их количество. Операция запроса будет неявно распознаваться как операция запроса инструментом генерации кода службы RIA. Однако она должна возвращать IQqueryable <T>, IEnumearble <T> или В противном случае сущности украшаются функциями запросов для методов.
Программисты могут настроить кэширование для операций запроса, чтобы сэкономить сетевые ресурсы. Когда объем данных изменяется меньше, использование кэширования является хорошим выбором. Чтобы использовать выходной кэш, используйте функцию OutputCache, чтобы изменить операцию запроса и настроить поведение кеша с помощью параметров его конструктора. Эти параметры включают местоположение кеша данных и длину кеша.
3.3.3 Вставка, обновление, удаление соглашения об именах операций
Фактически, операции вставки, обновления и удаления не будут вызываться клиентом. Когда клиент вызывает метод SubmitChanges для предоставления изменений, служба RIA будет вызывать операции вставки, обновления и удаления каждого объекта. Конкретный вызов основан на наборе изменений. поведение. Операции добавления, удаления и изменения должны получать объект-сущность в качестве своих параметров, операция будет завершена после завершения этих параметров, и никакое значение не будет возвращено. При именовании методов необходимо соблюдать следующие соглашения.
(1) Имя операции вставки должно начинаться со слова «Вставить», «Создать» или «Добавить», в противном случае программисту потребуется применить для метода функцию «Вставка», например, операцию вставки:
(2) Имя операции обновления должно начинаться с Update, Change или Modify, в противном случае программист должен применить функцию Update к методу, например, операцию обновления:
(3) Имя операции удаления должно начинаться с «Удалить» или «Удалить», в противном случае программист должен применить к методу функцию удаления, такую как операция удаления:
Если сущность Product разрешено редактировать в мастере класса обслуживания домена, то в сгенерированном классе вы увидите, что были созданы методы вставки, обновления и удаления, как показано в следующем коде:
3.3.4 Операция вызова
Операция вызова — это обычная операция домена. Операция вызова имеет поведение, аналогичное стандартной службе WCF. Как правило, операция вызова не возвращает или не обрабатывает объект. Операция вызова может заключаться в инициализации поведения сервера (запросить сервер отправить электронную почту). ) Или запросите данные с сервера для возврата простых типов или некоторых данных, которые не нужны для отслеживания набора изменений (например, запрос текущего курса обмена валюты).
Как и операция запроса, операция вызова — это метод, который клиент может вызывать напрямую. Эти операции будут вызываться немедленно (в отличие от пользовательской операции, которая будет поставлена в очередь, а затем вызываться только при отправке набора изменений на сервер).
Хотя операции вызова концептуально аналогичны обычным операциям службы WCF, они не могут возвращать сложные типы, кроме объектов сущностей. Это может быть очень большой проблемой при использовании услуг RIA. Это означает, что невозможно вернуть сложные типы объектов клиенту. Единственный способ решить эту проблему — вернуться к чистой коммуникации WCF, надеясь, что эта проблема может быть преодолена в будущем.
Операции вызова не требуют соглашений (соглашений) об именах или сигнатурах методов. По сути, операции в любой доменной службе, если они не относятся к какому-либо другому типу классификации операций (по именам или сигнатурам методов), будут рассматриваться как вызывающая операция сервисом RIA. Вы также можете отобразить метод как вызывающий метод, применив Invoke к методу. Пример операции вызова следующий:
3.3.5 Пользовательская операция
Пользовательские операции используются для выполнения некоторых действий над объектом. Например, у вас может быть операция по деактивации продукта. Все эти логики будут выполнены на стороне сервера, но когда клиент использует операцию вызова, она будет выполнена немедленно. , Пользовательская операция не будет выполнена немедленно, она будет отложена до тех пор, пока клиент не отправит изменение, установленное на сервер, и пользовательская операция может рассматриваться как та же операция, что и вставка / обновление / удаление.
Когда клиент генерирует пользовательскую операцию, он будет создан как метод объекта, а затем будет действовать на этот объект, а также будет создан на уровне контекста объекта для выполнения вызова.
Пользовательский метод обычно выполняется после вызова операции вставки или обновления на стороне сервера.Если пользовательская операция вызывается для объекта, но затем объект удаляется, пользовательский метод вызываться не будет, и Отбрасывается
У пользовательских операций нет соглашения об именах, но они не должны иметь возвращаемого значения и должны получать объект-сущность в качестве первого параметра (также допускается любое количество других параметров). Не существует очевидной возможности для определения пользовательской операции, но вместо этого вы должны использовать функцию обновления и установить для ее атрибута UsingCustomMethod значение True. Примеры пользовательских операций:
WCF RIA Services. Начало. Часть 1
В данном цикле переводов присутствует хорошая доля, добавленная лично мной, так как в оригинале используется устаревшая VS, а так же пропущены некоторые, на мой взгляд важные моменты, без которых усвоение материала сильно усложняется. Поехали.
Осторожно. Много картинок!
Вступление
Представьте, что Вам необходимо создать серьезное бизнес приложение, клиент которого оперирует множеством данных, распределенных в различных местах, и которые должны каким-то образом собираться. Для реализации такой задачи Вам будет необходимо изучить ряд новых технологий и подходов, написать кучу кода, отладка. А что в итоге? Если грубо — то просто пересылка данных с серверной части приложения в клиентскую и обратно. Ну и работа с БД. А на что бы Вы хотели сфокусироваться в первую очередь? На реализации пересылки данных? Или на логике обработки, манипулирования, представления этих данных? Думаю, Вы выберете второе.
WCF RIA Services предлагает автоматизацию пересылки данных и создания многоуровневых приложения на основе Silverlight, фокусируя внимание разработчика именно на логике работы. Вы пишите только один раз экземпляр серверного кода, а он автоматически переносится и становится доступным на клиентской стороне, без необходимости ручного дублирования или применения других ухищрений со стороны разработчика. Так же на клиенте остаются доступны все серверные возможности, такие как валидация, права доступа и многие др.
В этом цикле статей Вы ознакомитесь с основными возможностями WCF RIA Services, увидите на практике какие преимущества предоставляет использование данного подхода. На диаграме ниже показано, за что именно отвечает WCF RIA Services:
сегодня воспользуемся стандартным, самым простым шаблоном Silverlight. В последующих частях будем наращивать наши знания путем доработки приложения и использования новых методик, тактик и технологий, одними из которых будет паттерн Model-View-ViewModel (MVVM) и модульное тестирование (unit testing).
Задачи, решаемые создаваемым приложением
Просто электронный блокнот, в который можно заносить событие, давать ему название, исполнителя, проект, дату начала и окончания. В общем ничего сложного или необычного, однако хорошее понимание того, ЧТО нужно сделать только облегчит понимание того КАК это сделать в рамках изучаемой технологии.
Изучаемые аспекты WCF RIA Services:
-
Project Links (ссылки между проектами) – связь между клиентским Silverlight проектом и серверным вэб приложением или классом библиотеки. Серверный проект определяет или создает ссылки на доменные службы, сущности, метаданные, а так же предоставляет механизм, благодаря которому код, определенный на сервере доступен клиенту. Благодаря ссылке весь необходимый клиенту код генерируется динамически во время компиляции.
Шаг 1: Создаем Silverlight приложение и ссылку на серверную часть.
Воспользуемся простой БД, которая будет сохранять задания, а также всю сопутствующую информацию. Для этого необходимо будет запустить скрипт TaskManager.sql, находящийся в коне проекта, создать БД и схему, заполнить БД начальными значениями.
Создайте новый проект с именем «TasksManager». Возможность использовать WCF RIA Services присуща любому типу Silverlight приложений. Однако начнем с самого простого и выберем шаблон «Приложение Silverlight». 
После нажатия на кнопку ОК, откроется следующее диалоговое окно, в котором необходимо добавить птичку на «Включить службы WCF RIA». 
Благодаря ей создадутся необходимые ссылки на серверный проект, появится кодогенерация и остальные функции, описанные ранее.
Нажимаем ОК и ждем создания проекта.
Шаг 2: Создаем Domain Model Entities
Так как WCF RIA Services в основном предназначен для перемещения данных туда/сюда от клиента к серверу и обратно, Вам понадобятся некоторые модели данных данные. Из коробки поддерживается Entity Framework. Однако существует возможность использовать LINQ to SQL в WCF RIA Services Toolkit. Если создать свой доменный сервис, то можно работать с POCO. Сейчас воспользуемся стандартным Entity Framework.
Но перед тем, как создать Domain Model Entities, необходимо создать БД и заполнить ее.
Для этого нужно добавить в серверной части (с приставкой .Web) папку «App_Data»: 


Двойной клик по созданной БД «Database*.mdf». Откроется окно. Выбираем в нем опять «Database*.mdf», правой кнопкой — «Новый запрос». Откроется редактор запросов. Открываем TasksModel.sql, про который уже говорилось и копиреум от туда все, за исключением первых таких строк:
Нажимаем на кнопку «Выполнить». Все. БД заполнена таблицами, а таблица Tasks заполнена данными.
Жмем правой кнопкой мыши по TaskManager.Web и выбираем «Добавить»-«Создать элемент». Выбираем вкладку «Данные» в левом окне, а в правом выбираем «Модель ADO.NET EDM». Даем имя «TasksModel.edmx«. 
Добавить. Откроется диалоговое окно Мастер моделей EDM. Выбираем нужную БД, даем имя сущности «TaskManagerEntities» и кликаем Далее. 
На следующем шаге выбираем галочкой таблицы. Даем имя модели «TaskManagerModel», а так же ставим галочку на «Формировать имена объектов во множественном или единственном числе» 
Вуаля. Теперь у Вас имеется модель данных Entity Framework для всех таблиц в БД. Однако в этом уроке вы будете работать только с таблицей «Task», однако далее таблицы будут добавляться.
Постройте решение, что б убедиться, что все сделано правильно.
После создания EDM — вам должно открыться окно дизайнера.Если оно автоматически не открылось, то двойной клик в Обозревателе решения по TasksModel.edmx. Далее кликаем по пустой области. И переходим в окно свойств. Меняем параметр«Стратегия создания кода» с «Нет» на «По умолчанию». Пересобираем. 
Теперь Пришло время создать службу домена.
Шаг 3: Создание Domain Service
Сейчас создадим ядро RIA Services — службу домена. Правой кнопкой на серверной части: TaskManager.Web – «Добавить»-«Создать элемент». Выбираем в левом окне категория «Веб», а справа «Класс DomainService». Даем имя «TasksDomainService«. 
После нажатия на кнопку Добавить, переходим в окно настроек службы. Так как сейчас будем работать только с таблицей Tasks — выбираем ее. В столбце «Включить редактирование» галочка не нужна. Пока. Если ее поставить то получите набор CRUD. Если нет – то только Get (чтение). Жмем ОК.
Созданный код, без коментариев будет выглядеть так:
Класс LinqToEntitiesDomainService предоставляет связь между моделью EDM и службами WCF RIA. Атрибут «EnableClientAccess» указывает на то, что этот метод необходимо добавить в клиентскую часть во время автоматической кодогенерации. В данном случае получили только метод чтения данных из таблицы, однако можно реализовать полноценный CRUD или любые другие действия над данными, которые Вам будут нужны, и которые в итоге так же будут доступны в клиентском проекте. Как это делать рассмотрим более подробно в следующих статьях.
Так же запомните, что используются конвенции, которые относятся к типу возвращаемого значения(Queryable) и правилам именования(GetName). В данном случае имеем делегированную сущность модели данных ObjectContext, которая создается как часть базового класса и используется для извлечения всей таблицы Tasks. Вы так же можете усовершенствовать данный запрос добавив сортировку, фильтры и т.д., однако пока возвращаемое значение имеет тип IQueryable, WCF RIA Services понимает это и формирует соответствующие методы, которые позволят использовать данный функционал на стороне клиента.
Перестроим проект, чтоб убедиться, что все сделано правильно. В клиентском проекте, при нажатии на иконку двух листиков «Показать все файлы» — должен появиться файл с именем TaskManager.Web.g.cs, который и содержит сгенерированный код для клиента.
Шаг 4: Получение данных в UI используя DomainDataSource
Сегодня воспользуемся такой возможность WCF RIA Services, как «drag and drop», используя DomainDataSource непосредственно в UI. В следующих частях рассмотрим так же паттерн MVVM, как его использовать в WCF RIA, а так же как при таком подходе использовать DomainDataSource.
Итак, откройте MainPage.xaml. Далее откройте окно Источники данных. А теперь перетащите Tasks в графический редактор страницы на белое поле. Поправьте размещение. Все. В разделе XAML увидите созданный код для элемента Grid. 

Строим и запускаем приложение. И наслаждаемся похожим видом: 
WCF – Риа Сервисес
WCF RIA Service – это инфраструктура более высокого уровня и новый компонент таких платформ, как .NET 4 и Silverlight 4, который упрощает процедуру создания сложного бизнес-приложения в Silverlight, предлагая проверку на стороне клиента. РИА выступает за богатые интернет-приложения.
Здесь следует отметить, что Silverlight – это платформа, предлагаемая Microsoft, которая идеально подходит для многофункциональных интернет-приложений и доступна для использования в качестве подключаемого модуля браузера, как и Adobe Flash.
Служба WCF RIA в основном основана на стандартной версии службы WCF. На следующем рисунке показана часть архитектуры WCF, на которой в основном сосредоточены службы RIA WCF.

Создание службы WCF RIA – это следующий шаг для лучшего понимания концепции. Пошаговая процедура приведена ниже.
Шаг 1. Создайте новый веб-проект с именем SLWCFRiaServices.Web с помощью Silverlight 5, а затем добавьте новый элемент, выбрав в нем модель данных объекта ADO.NET.


Шаг 2. Теперь выберите содержимое модели в мастере Entity Data Model Wizard, сгенерировав модель из базы данных.

Шаг 3 – Из того же мастера выберите подключение к данным и объекты базы данных.


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

Шаг 5 – Теперь создайте доменную службу в веб-проекте, добавив новый элемент и убедитесь, что клиентский доступ включен.


Шаг 6 – На следующем шаге будут сгенерированы некоторые классы, и важно создать их заново.


Шаг 7 – На этом шаге DataDomainContext отображается на панели источников данных.

Шаг 8 – На этом шаге статья под DataDomainContext должна быть выбрана и настроена.

Шаг 9 – Присоединение элемента управления DataGrid к источнику данных – это совершенный шаг, а также выбор тем. Здесь выбрана тема BureauBlue.


Шаг 10. Последний и последний шаг состоит из перехода на экран дизайна и добавления объекта в область макета главной страницы простым перетаскиванием. Также очень важно обеспечить AutoGenerateColumns = “True” и запустить его для просмотра выходных данных.


Предпосылки
Есть несколько предпосылок для того, чтобы полностью использовать потенциал сервисов RIA WCF –
- Visual Studio 2010 / Visual Studio 2012
- Среда разработки Silverlight
- Последняя версия RIA Services Toolkit
- SDK (комплект разработки программного обеспечения)
Доменная служба WCF RIA
Доменная служба состоит из набора операций с данными, связанных с бизнесом. Это всего лишь служба WCF, которая предоставляет бизнес-логику любого приложения службы WCF RIA.
Доменная служба WCF RIA имеет внутренний класс хостинга DomainServiceHost, который, в свою очередь, использует класс WCF ServiceHost для размещения приложения. Чтобы сделать службу домена доступной для клиентского проекта, она должна иметь атрибут EnableClientAccessAttribute. Атрибут применяется автоматически каждый раз, когда добавляется новый класс обслуживания домена.
На следующем рисунке показана архитектура доменной службы WCF RIA.

Услуги WCF RIA – Запрос данных
На следующем рисунке показано, как запрос создается на стороне клиента и выполняется на стороне сервера для возврата запрашиваемых результатов. DAL обозначает Уровень доступа к данным.

WCF RIA Services – Обновление данных
На следующем рисунке показано, как данные обновляются путем выполнения операции CUD (Create Update Delete) на стороне сервера. Здесь следует отметить, что служба WCF RIA всегда находится на сервере без сохранения состояния.