<< Click to Display Table of Contents >> Разработка > Элементы разработки > Модуль Изолированные области |
Чтобы выполнять код сторонней сборки в отдельном процессе независимо от других сервисов, его можно перенести на сервис изолированного кода (IsolatedArea). В этом случае работа других сервисов продолжится, даже если при выполнении изолированного кода возникнут ошибки. Также в изолированную область можно добавлять код, который содержит ресурсоемкие вычисления, например конвертация больших документов.
Чтобы добавить изолированную область:
1.В редакторе модуля перейдите в узел «Изолированные области».
2.Нажмите на кнопку Добавить.
3.В открывшемся окне укажите имя изолированной области. Оно должно быть уникальным, состоять из букв латинского алфавита и цифр.
4.Нажмите на кнопку OK.
5.По ссылке Функции создайте функции, которые будут вызываться в изолированной области.
6.По ссылке Код области добавьте код, который нужно выполнять на сервисе изолированного кода.
При создании изолированной области учитывайте особенности и ограничения.
После сборки решения для каждого модуля создаётся сборка <Имя модуля>.Isolated.dll. При необходимости администратор может изменить настройки запуска сервиса изолированного кода.
В качестве аргументов и результатов выполнения функции используются простые типы, потоки данных базового типа Stream(System.IO.Stream), списки, словари и изолированные структуры модуля.
При создании функции можно использовать только изолированные структуры, добавленные в этом модуле. Чтобы структура стала доступной в изолированной области, перед ее описанием нужно добавить атрибут Public с параметром Isolated со значением true:
[Public(Isolated=true)]
partial class DpadSignaturInfo
{
public int SignIcon { get; set; }
public string Status { get; set; }
}
Чтобы функция стала доступна в клиентском, серверном и разделяемом коде, перед ее описанием нужно добавить атрибут Public:
[Public]
public void Function()
{
...
}
Формат вызова функции:
Sungero.<Имя модуля>.IsolatedFunctions.<Имя области>.<Имя метода>(<список аргументов>)
Если в функции используются потоки данных, то учитывайте их особенности. В качестве возвращаемого значения и аргументов функции можно использовать только потоки данных базового типа Stream(System.IO.Stream). При этом в коде функции можно использовать любые потоки, например FileStream или MemoryStream. Передавать можно несколько потоков, а возвращать только один. Возвращенный поток из изолированной функции может быть прочитан один раз, повторная попытка чтения приведет к ошибке.
Пример функции с использованием потоков:
public class IsolatedFunctions
{
[Public]
public Stream AddStamp(Stream pdfDocumentStream, string stamp)
{
var pdfStamper = new PdfConverter.PdfStamper();
Stream result = pdfStamper.AddStamp(pdfDocumentStream, stamp);
return result;
}
}
Пример вызова функции в коде изолированной области:
public class ModuleFunctions
{
public virtual void LoadVersionFromFileAndAddStamp(IElectronicDocumentVersions version, string path, string stamp)
{
using (FileStream fileStream = File.OpenRead(path))
using (Stream documentWithStamp = Sungero.StampModule.IsolatedFunctions.StampArea.AddStamp(fileStream, stamp))
{
version.Body.Write(documentWithStamp);
}
}
}
Код выполняется в изолированной области. В нем можно обращаться к функциям из сторонних сборок и функциям, созданным в изолированной области.
На код изолированной области не распространяются стандартные ограничения среды разработки. Например, вы можете добавить свои интерфейсы и их реализацию. Также в среде разработки недоступна отладка кода изолированных областей. Вы можете использовать стороннюю программу, например Microsoft Visual Studio.
Особенности изолированных областей
Модули с изолированными областями можно перекрывать. При этом в изолированной области перекрытого модуля доступны только его изолированные структуры или изолированные структуры предка.
Для изолированных областей есть ограничения:
•в коде изолированной области нельзя работать с сущностями, репозиториями, базой данных. Данные передаются через параметры функций изолированной области;
•в перекрытых модулях нельзя добавлять новые изолированные области;
•при изменении кода области публикация разработки без перезапуска веб-сервера недоступна;
•сервис асинхронных событий (Worker), настроенный на работу под .NET Framework, не может работать с изолированными областями. При попытке вызвать функцию изолированной области возникает ошибка «Isolated area service is not supported». Чтобы вызывать такие функции, настройте выполнение фоновых процессов и асинхронных обработчиков на сервисе Worker, который запущен под .NET Core. Сервис асинхронных событий, настроенный под .NET Framework, рекомендуется использовать только для фоновых процессов и асинхронных обработчиков, которые не работают под .NET Core. Например, это может потребоваться, если подключены устаревшие сторонние библиотеки.
В изолированных областях можно использовать сторонние библиотеки, у которых указана область действия Сервер и изолированные области. По умолчанию доступны библиотеки Aspose, Newtonsoft.Json и другие, подключенные в стандартной разработке. Чтобы использовать их возможности, достаточно в программном коде добавить нужные пространства имен.
© Компания Directum, 2024 |