Zyan Framework

Близится выпуск второй версии проекта Zyan Framework, в котором я участвую в качестве разработчика. Думаю, к выпуску стоит приурочить перевод документации с немецкого языка. На английский я уже все перевел, осталось перевести на русский. Все статьи буду параллельно публиковать здесь. Итак, начнем со вступления:

Описание проекта

Zyan — это инфраструктура, упрощающая разработку распределенных приложений. Используя Zyan, вы можете опубликовать любой .NET-класс для удаленного взаимодействия. Zyan гибко настраивается и предоставляет все необходимые инструменты для построения модульных распределенных приложений.

Zyan требует для работы Microsoft .NET Framework 3.5 Client Profile, либо Mono 2.8 или выше (поддерживаются платформы Linux & Mac; см. скриншот).

Особенности

  • Интуитивный программный интерфейс
  • Широкий выбор вариантов хостинга .NET-компонентов (локальных или удаленных)
  • Два режима активации компонентов: сингльтон и режим одиночных вызовов
  • Поддержка TCP, HTTP и именованных каналов (для других протоколов возможно написать собственные плагины)
  • Дуплексный TCP-канал позволяет серверу взаимодействовать с клиентами, находящимся за NAT-ом или брандмауэром
  • Поддержка шифрованных каналов, не требующая сертификатов и наличия служб Active Directory
  • Простая в использовании расширяемая система аутентификации
    • Поддержка интегрированной аутентификации Windows (единый вход в систему)
    • Поддержка базовой аутентификации на серверах SAM (удобно при отсутствии служб Active Directory)
  • Расширяемое управление сессиями
    • Быстрый и легкий однопроцессный менеджер сессий (сессии хранятся в памяти сервера)
    • Масштабируемый менеджер сессии на базе SQL-сервера (сессии хранятся в СУБД)
    • Переменные сессий поддерживаются обоими вариантами менеджера сессий
  • Распределенные события обрабатываются так же просто, как button_Click в Windows.Forms-приложениях
  • Поддержка связывания распределенных EBC-компонентов (Event Based Components)

Простейший пример распределенного приложения

Публикация компонента:

// Создаем сервер ZyanDemo и привязываем его к TCP-порту 8080
var host = new ZyanComponentHost("ZyanDemo", 8080);
 
// Регистрируем тип и интерфейс компонента
host.RegisterComponent();

Вот и все, что нужно, чтобы компонент HelloWorldService стал доступным для удаленного взаимодействия.

Классу HelloWorldService не требуется наследование от MarshalByRefObject. Кроме того, не требуется разметка класса атрибутами ServiceContract и OperationContract. Любой .NET-класс может быть опубликован для удаленного взаимодействия. Единственное требование к нему — наличие интерфейса, через который будут осуществляться вызовы методов.

Получение доступа к службе с удаленного компьютера:

// Соединяемся с сервером
var connection = new ZyanConnection("tcp://localhost:8080/ZyanDemo");
 
// Создаем прокси-объект для HelloWorldService
var proxy = connection.CreateProxy();
 
// Вызываем метод (точно так же, как метод локального объекта)
proxy.SayHello("HelloWorld");

Дальнейшие подробности см. в разделе Документация.

Leave a Reply