DoconutOptions

Настройка сервисов Doconut

DoconutOptions (namespace Doconut) — единственный объект конфигурации для всего SDK. Вы настраиваете его один раз, в обратном вызове, который передаёте в DoconutHost.Initialize в Application_Start.

csharp
Doconut.DoconutHost.Initialize(options =>
{
    options.LicensePath     = HostingEnvironment.MapPath("~/wwwroot/Doconut.Viewer.lic");
    options.UnsafeMode      = false;
    options.ShowDoconutInfo = false;
    options.AddPlugin<Doconut.Plugins.Dicom.DicomPlugin>();
});

Свойства

ТипСвойствоПо умолчаниюОписание
boolUnsafeModefalseКогда false, DocImage.axd обслуживает страницу только для ASP.NET‑сессии, которая открыла документ (или, в ферме, для браузера с подписанным билетом). Когда true, обслуживается любой запрос, содержащий токен. Оставьте его false — см. Сессии и безопасность.
boolShowDoconutInfofalseКогда true, запрос DocImage.axd без токена отвечает Doconut <version> is running on <host> вместо 404. Полезно как проверка дымового теста; оставьте false в продакшене.
stringResourcesPath"/doconut-res"Префикс URL, под которым модуль ресурсов обслуживает встроенные скрипты, стили и изображения.
stringLicensePath""Полный путь к файлу лицензии. Пусто → следующий источник лицензии, затем автоматическое обнаружение; если ничего не найдено → оценочная версия с водяным знаком без возможностей.
stringLicenseContent""Сырой контент лицензии (база данных, переменная окружения, хранилище секретов). Имеет приоритет над LicensePath.
Stream?LicenseStreamnullЛицензия как поток, читается один раз при запуске. Имеет приоритет над обоими другими источниками.
stringMiddlewarePath"/doconut"Не используется System.Web. Точка доступа страницы всегда обработчик DocImage.axd, объявленный в Web.config. Значение всё равно проверяется при запуске (см. ниже).
boolResetLicensefalseНе используется. Лицензия читается один раз, в DoconutHost.Initialize; перезапустите пул приложений после замены лицензии.
DoconutPluginRegistryPluginRegistry—Регистр только для чтения вкладов плагинов, заполняется AddPlugin<T>().

Приоритет лицензий: LicenseStream → LicenseContent → LicensePath → автоматическое обнаружение (см. Настройка лицензии).

Методы

AddPlugin<TPlugin>()

text
DoconutOptions AddPlugin<TPlugin>() where TPlugin : IDoconutPlugin, new()

Регистрирует плагин (Converter, DICOM). Fluent — возвращает экземпляр options. Annotation и Search — встроенные лицензированные функции и не используют его.

Если активная лицензия не предоставляет возможности плагина, DoconutHost.Initialize бросает InvalidOperationException из Application_Start, и сайт отвечает на каждый запрос пустым 500, пока это не исправлено; сообщение находится в журнале событий Windows (см. Система плагинов).

Add…Widget()

text
DoconutOptions AddConverterWidget(Action<ConverterWidgetOptions>? configure = null)

Встроенные виджеты выключены по умолчанию. Каждый вызов Add…Widget() включает конечные точки этого виджета на DocImage.axd и требует, чтобы соответствующий плагин был зарегистрирован. Модуль ресурсов обслуживает скрипт виджета независимо от того, включили вы его или нет, поэтому виджет, который загружается и отрисовывается, но отвечает 404 при первом действии, пропускает этот вызов. Виджет Converter задокументирован в Плагин Converter.

RegisterViewer(extension, factory, defaultConfig?)

text
DoconutOptions RegisterViewer(
    string extension,                    // ".myext" — начальная точка опциональна
    Func<IFormatViewer> factory,
    Func<BaseConfig>? defaultConfig = null)

Регистрирует пользовательский просмотрщик для расширения файла. Пользовательские просмотрщики имеют приоритет над встроенными и просмотрщиками плагинов и не зависят от лицензии. Когда defaultConfig опущен и документ открывается без явной конфигурации, используется ImageConfig.

Бросает ArgumentException (Extension must be a non-empty file extension.) при пустом расширении и ArgumentNullException при null‑фабрике.

Проверка при запуске

DoconutHost.Initialize проверяет параметры перед построением чего-либо:

text
DoconutOptions.MiddlewarePath must be a non-empty path starting with '/'.
DoconutOptions.ResourcesPath must be a non-empty path starting with '/'.
DoconutOptions.MiddlewarePath and ResourcesPath must be different paths.

MiddlewarePath проверяется, хотя System.Web никогда его не использует, поэтому оставьте его со значением по умолчанию. Как и каждое исключение, выброшенное из Application_Start, ошибка проверки отображается как пустой 500 на каждый запрос, с сообщением в журнале событий Windows.

Общие конфигурации

csharp
// Production: явная лицензия, всё остальное — безопасное значение по умолчанию.
public static void ProductionLicense() =>
    Doconut.DoconutHost.Initialize(options =>
    {
        options.LicenseContent = Environment.GetEnvironmentVariable("DOCONUT_LICENSE") ?? "";
    });

// Пользовательский путь ресурса (например, чтобы избежать конфликта маршрута). Сохраните ResPath просмотрщика и любой MVC
// IgnoreRoute в соответствии с ним: "/docs-assets" означает ResPath: 'docs-assets/images'.
public static void CustomResourcePath() =>
    Doconut.DoconutHost.Initialize(options =>
    {
        options.ResourcesPath = "/docs-assets";
    });

Когда вы меняете ResourcesPath, меняйте одновременно три вещи: параметр, ResPath виджета ('docs-assets/images' для "/docs-assets") и, в MVC, IgnoreRoute для пути ресурса (routes.IgnoreRoute("docs-assets/{*pathInfo}")). Конечная точка DocImage.axd не перемещается: её путь задаётся атрибутом path обработчика в Web.config.

Была ли эта страница полезной?