Капелла 4.0 – простое решение

Капелла 4.0 – простое решение

Поговорим о создании полноценного решения на платформе Капелла 4.0.
Недавно стали доступны для публичного тестирования Windows 8 Consumer Preview и Visual Studio 11 Beta, поэтому не удивляйтесь, если на скриншотах вы увидите элементы их интерфейса smile:).

Создание решения в Visual Studio

Начнем с создания в Visual Studio пустого решения, которое назовем Capella4. Наше решение будет использовать Silverlight, поэтому будет состоять из двух основных проектов – веб-проекта Capella4.Web и собственно Silverlight-проекта – Capella4. Эти два проекта можно создавать разными способами, мы выберем один из них: выберем пункт меню Add New Project…, выберем Visual C# и Silverlight, а затем шаблон Silverlight Application. Укажем Capella4 в качестве названия проекта и нажмём ОК. Далее Visual Studio предложит нам создать веб-сайт, на котором будет размещено наше приложение. Т.к. мы еще не создали веб-сайт, как раз сейчас для этого подходящее время. В качестве имени проекта оставим предложенный вариант – Capella4.Web. Не рекомендуется изменять это значение по умолчанию, т.к. если пространство имен по умолчанию в веб-проекте не начинается с полного корневого пространства имен из Silverlight-проекта, то в RIA-сервисах могут появиться сложности, связанные с указанием строк ресурсов. Капелла будет работать как в Silverlight 4, так и в Silverlight5, поэтому выбираем просто ту версию, которая больше нам подходит. Включаем использование RIA-сервисов (это чекбокс Enable WCF RIA Services, который нужно отметить). В результате диалог создания веб-проекта из Visual Studio 11 будет выглядеть так:


Для полноты картины снимок получившегося проекта из Solution Explorer – оцените новые «серые» тона Visual Studio smile:):


В результате получаем:
  • Веб-проект Capella4.Web создан и назначен запускаемым проектом – это хорошо.
  • Для нас созданы на выбор две идентичные страницы Capella4TestPage.aspx и Capella4TestPage.html, одна из них уже назначена запускаемой страницей по умолчанию – это тоже хорошо. В результате, если мы просто запустим проект, то нам уже откроется в браузере наше Silverlight-приложение.
  • В проекте Capella4 присутствует файл MainPage.xaml. Этого нам не нужно – ядро Капеллы уже содержит свою главную страницу. Поэтому файл MainPage.xaml удаляем.
Теперь требуется добавить ссылки на сборки ядра Капеллы. В версии 4.0 сборки все еще распространяются в виде dll-файлов в папке, и нам нужно добавить их вручную через диалог Add Reference… Следующая версия ядра будет поддерживать пакеты NuGet и добавление ссылок на сборки ядра станет более простой задачей.
В проекте Capella4.Web требуется добавить ссылку на сборку Aurex.ClientModel.Web.dll. Также в файле web.config пока отсутствуют необходимые настройки для выполнения RIA-сервисов. Их можно либо добавить вручную, либо позволить сделать это самостоятельно, создав в проекте RIA-сервис. Для этого выберем Add -> New Item… и выберем Domain Service Class. В поле Name введем SimpleService.cs и нажмем ОК. Появится диалог параметров RIA-сервиса, который заполним следующим образом:

После нажатия ОК будет создан сервис, а необходимые настройки в web.config будут добавлены автоматически. Сам сервис мы пока использовать не будем (его даже можно удалить), но настройки из web.config пригодятся для работы сервисов, находящихся в Aurex.ClientModel.Web.dll. Вот такой вот хак.

В проекте Capella4 требуется добавить ссылки на следующие сборки ядра:
  • Aurex.Foundation.Silverlight.dll
  • Aurex.ClientModel.Silverlight.dll
  • Aurex.Shell.Silverlight.dll

После этого открываем файл App.xaml.cs и исправляем метод Application_Startup. Вместо явного присвоения переменной RootVisual экземпляра MainPage (этот класс мы удалили), вставляем запуск оболочки Aurex:

private void Application_Startup(object sender, StartupEventArgs e)
{
    Aurex.Shell.ShellApplication.Run();
}

Запускаем приложение. После запуска должна появиться следующая картина:


Т.е. Капелла теоретически уже работает. Однако войти в систему пока нельзя. Для этого нужно реализовать службу аутентификации.
Служба аутентификации может быть реализована как непосредственно в проекте Capella4, так и в проекте модуля (механизм создания модулей мы рассмотрим отдельно). Реализуем сейчас простую службу аутентификации прямо в проекте Capella4. 

Служба аутентификации

Служба аутентификации в Капелле 4 должна удовлетворять следующим требованиям:
  1. Она должна находиться либо в запускаемом проекте, либо в одном из автоматически загружаемых модулей.
  2. Она должна представлять собой public-класс, реализующий интерфейс Aurex.ClientModel.Authentication.IAuthenticationService.
  3. Класс службы должен быть помечен атрибутом Aurex.ClientModel.Authentication.AuthenticationServiceAttribute (для того, чтобы можно было использовать этот атрибут, в проекте требуется добавить ссылку на System.ComponentModel.Composition).
Все методы IAuthenticationService используют асинхронную модель программирования – они существуют в виде пар Begin/End, работающих с IAsyncResult. Следовательно, реализуемая служба аутентификации может осуществлять взаимодействие с сервером для проверки подлинности пользователя (в Silverlight взаимодействие с сервером всегда выполняется в асинхронном режиме).
Если в проекте или модулях содержится несколько служб аутентификации, пользователь на странице входа в систему может выбрать требуемую службу. При этом пользователю отображается список доступных служб, в котором каждая служба представлена строкой имени, указанной в атрибуте AuthenticationServiceAttribute. Если пользователь успешно выполнил вход с помощью какой-либо службы, то при следующем запуске для этой службы будет вызван метод LoadUser. Служба может вернуть из этого метода аутентифицированного пользователя, в этом случае диалог входа в систему выдан не будет – так реализован механизм «запомнить меня» (т.е. механизм запоминания пользователя реализуется (либо может не быть реализован) в каждой службе отдельно, и служба сама выбирает механизм хранения учетной записи). Для входа пользователя с помощью формы используется метод Login, для выполнения выхода – метод Logout. В методе Login служба может сохранить учетную запись для последующего использования в LoadUser. В методе Logout служба может удалить сохраненную учетную запись, если она была сохранена.
RIA-сервисы имеют свой механизм аутентификации, выполняющий проверку подлинности на сервере через стандартный механизм аутентификации ASP.NET. Аутентификация через RIA-сервисы позволяет использовать контекст аутентифицированного в Silverlight пользователя в RIA-методах на стороне сервера. Аутентификация через RIA-сервисы является самой простой и удобной для приложений Silverlight. Для того чтобы ее использовать, необходимо унаследовать класс службы аутентификации от базового класса Aurex.ClientModel.Authentication.DomainAuthenticationServiceBase и реализовать только один метод – CreateDefaultUser. Метод CreateDefaultUser должен возвращать сгенерированный класс User из службы аутентификации RIA. Также служба должна быть соответствующим образом реализована в веб-проекте.
Итак, перейдем от теории к практике и создадим службу аутентификации через RIA-сервисы в нашем решении. Как уже отмечалось, RIA-сервисы используют аутентификацию ASP.NET, которая по умолчанию работает с базой данных SQL Server. Простейший способ ее использования предполагает, что на компьютере установлен экземпляр SQL Server Express с именем SQLEXPRESS. Если это не так, требуется создать базу данных membership и указать нужные настройки в файле web.config (более подробно см. в документации MSDN). Будем считать, что мы уже создали базу и завели в ней пользователей.
Начнем с создания стандартной инфраструктуры аутентификации через RIA-сервисы. Для этого в проекте Capella4.Web создадим раздел Services, затем в этот раздел добавим новый элемент Authentication Domain Service. Назовем соответствующий файл AuthenticationService.cs:


Созданный файл содержит реализацию RIA-службы аутентификации, названную AuthenticationService, а также используемый ей класс User. Сейчас нам менять этот файл не требуется. Приведем содержимое этого файла:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.ServiceModel.DomainServices.Hosting;
using System.ServiceModel.DomainServices.Server;
using System.ServiceModel.DomainServices.Server.ApplicationServices;

namespace Capella4.Web.Services
{
    [EnableClientAccess]
    public class AuthenticationService : AuthenticationBase<User>
    {
// To enable Forms/Windows Authentication for the Web Application, edit the appropriate section of web.config file.
    }

    public class User : UserBase
    {
        // NOTE: Profile properties can be added here 
        // To enable profiles, edit the appropriate section of web.config file.

        // public string MyProfileProperty { get; set; }

    }
}
Авторы этого файла намекают на то, что нужно также открыть файл web.conig и в секцию system.web добавить следующую запись:
<authentication mode="Forms" />
После добавления службы и редактирования файла web.config построим проект Capella4, чтобы в нем сгенерировался необходимый RIA-код. Теперь в проекте Capella4 откроем файл App.xaml.cs и добавим в конструктор App() инициализацию RIA-сервисов (добавленные строки выделены коричневым):
public App()
{
    var context = new WebContext();
    context.Authentication = new FormsAuthentication();
    ApplicationLifetimeObjects.Add(context);


    this.Startup += this.Application_Startup;
    this.Exit += this.Application_Exit;
    this.UnhandledException += this.Application_UnhandledException;

    InitializeComponent();
}

Теперь создадим службу аутентификации Капеллы. Для этого в проекте Capella4 создадим раздел Services и добавим в него файл AuthenticationService.cs со следующим содержанием:
using Aurex.ClientModel.Authentication;
using Capella4.Web.Services;

namespace Capella4.Services
{
    [AuthenticationService("RIA"smile;)]
    public class AuthenticationService : DomainAuthenticationServiceBase
    {
        protected override System.Security.Principal.IPrincipal CreateDefaultUser()
        {
            return new User();
        }
    }
}

После выполнения всех этих действий вход в систему начнет работать и войти можно будет под любым пользователем, добавленным в базу пользователей ASP.NET. После входа наше приложение будет выглядеть минималистично, но правильно:


В следующий раз мы немного заполним ленту и рабочую область. Созданное сегодня решение прилагается.
Страницы: 1  2  3  
Страницы: 1  2  3  

Поделитесь информацией