Создание и публикация серверного расширения

Серверное расширение представляет собой библиотеку DLL, разработанную на платформе .NET.

Перечень необходимых инструментов

  • Visual Studio.

  • Docsvision WebClient SDK (запрашивается через портал ТП).

Описание файлов проекта

  • В корне репозитория расположено решение для Visual Studio (Samples.sln) и ключ для подписания сборок примеров (StrongNameKey.snk).

  • Assemblies — сборки, необходимые для использования примеров

  • ServerExtension.cs — входная точка расширение, в которой регистрируются сервисы и прочие сущности.

  • Sign.snk — файл подписи сборки. Для установки сборки должны быть подписаны. Рекомендуется сгенерировать новый файл подписи в настройках проекта.

  • Resource.resx, Resource.ru.resx — локализации, используемые в расширении.

  • Feature1 — папка, содержащая реализацию некоторой функциональности.

  • Feature1/Feature1Controller.cs — класс, регистрирующий конечные точки Web API.

  • Feature1/IFeature1Service.cs и Feature1/Feature1Service.cs — интерфейс и реализация сервиса, реализующего логику обработки запроса.

  • Feature1/Models — классы моделей, используемых в сервисе и контроллере.

Сборка и установка

Чтобы создать серверное расширение:
  1. Убедитесь, что установлен Docsvision WebClient SDK.

    В этом случае в переменной окружения DocsvisionWebClientSDK содержится путь к его папке, например, C:\Program Files (x86)\Docsvision\WebClient\5.5\SDK.

  2. Установите шаблон серверного расширения и создайте на его основе новый проект с названием LearnDocvisionServerExtension.

  3. Обновите в проекте ссылки на зависимости.

    После крупного обновления версии Docsvision, необходимо повторно скомпилировать расширение с новыми версиями компонентов. В остальных случаях такой необходимости нет.

    Это необходимо, чтобы версии подключаемых компонентов соответствовали версиям компонентов, используемых сервером Web-клиента, для которого разрабатывается расширение.

  4. Реализуйте в проекте функции серверного расширения.

    Примеры кода серверных расширений приведены в следующих пунктах раздела, а также в репозитории "ДоксВижн".

  5. Настройте ядро серверного расширения.

    Ядром серверного расширения называется файл ServerExtension.cs в проекте расширения. Ядро является производным от WebClientExtension классом, содержащим ссылки на реализуемые функции расширения.

    public class TemplateServerExtension : WebClientExtension
    {
        public TemplateServerExtension(IServiceProvider serviceProvider)
            : base(serviceProvider)
        {
        }
    
        public override string ExtensionName (1)
        {
            get {
                return Assembly.GetAssembly(typeof(TemplateServerExtension)).GetName().Name;
            }
        }
    
        public override Version ExtensionVersion (2)
        {
            get {
                return new Version(FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).FileVersion);
            }
        }
    
        public override void InitializeContainer(ContainerBuilder containerBuilder) { (3)
    
    (4)
        // containerBuilder.RegisterType<YourService>().As<IYourService>().SingleInstance();
        // containerBuilder.RegisterOrderedType<YourBindingConverterType, IBindingConverter>();
        // containerBuilder.RegisterOrderedType<YourBindingResolverType, IBindingResolver>();
        // containerBuilder.RegisterOrderedType<YourControlResolverType, IControlResolver>();
        // containerBuilder.RegisterOrderedType<YourPropertyResolverType, IPropertyResolver>();
        // containerBuilder.RegisterType<YourCardLifeCycle>().Keyed<ICardLifeCycle>(CardTypeID).SingleInstance();
        // containerBuilder.RegisterType<YourRowLifeCycle>().Keyed<IRowLifeCycle>(SectionID).SingleInstance();
        }
    
    (5)
    
    }
    1 Название расширения.
    2 Версия расширения.
    3 Метод регистрации добавляемых расширением сервисов, преобразователей, конвертеров и т.п. в IoC контейнере.
    4 Примеры регистрации.
    5 Далее идут функции, возвращающие реализованные функции серверного расширения.

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

    В серверном расширении Web-клиента используется IoC контейнер, реализованный с использованием библиотеки Autofac. Описание данной библиотеки и её возможностей см. на сайте [](https://autofac.org/).

  6. Скомпилируйте проект.

    В результате будет получен файл DLL с ядром серверного расширения и реализуемыми функциями, а также файлы DLL с локализованными ресурсами.

  7. Скопируйте safeprojectnamesafeprojectname.dll и safeprojectnamesafeprojectname.dll.pdb из папки bin  WebClient  Bin в Каталог-установки-Web-клиента  Site  bin.

    Расширения можно устанавливать в папки Site  Extensions и Site  bin. В ходе разработки расширения можно удобнее устанавливать в папку Site  bin, т.к. это избавляет от необходимости перезапускать IIS при установке сборок.

    В ресурсной поставке рекомендуется устанавливать сборки в папку Site  Extensions, чтобы проще было видеть, какие расширения установлены в Web-клиенте. Однако этот способ требует перезапуска IIS при установке или обновлении сборки.

  8. Перезапустите сервер IIS.

Проверка работы

  1. Откройте Web-клиент.

  2. Откройте диалог "О программе" и убедитесь, что расширение присутствует в списке подключенных расширений.

  3. Откройте произвольный документ и в консоли браузера выполните:

    $ await layoutManager.cardLayout.getService("requestManager").post("api/Feature1/Action1", JSON.stringify({ documentId: layoutManager.cardLayout.getService("cardId") }));
  4. Обновите документ, убедиться, что в названии добавился знак.