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");
Дальнейшие подробности см. в разделе Документация.