Налаштування ліцензії

Де Doconut шукає ваш файл ліцензії під IIS

Без ліцензії Doconut все одно рендерить документи — кожна сторінка лише містить водяний знак оцінки. На цій сторінці розглянуто чотири способи надання ліцензії в Global.asax, де Doconut шукає її, якщо ви не вказали жодного, та що відбувається, коли ліцензія плагіна відсутня.

Чотири способи надання ліцензії

Існує три явних джерела в DoconutOptions — шлях до файлу, потік або сирий вміст — плюс автоматичне виявлення, коли жодне з них не встановлено. Усі вони читаються один раз у DoconutHost.Initialize. Коли встановлено більше одного, пріоритет чітко визначений:

LicenseStream перемагає LicenseContent перемагає LicensePath перемагає автоматичне виявлення.

За шляхом

Вкажіть LicensePath повний шлях. Відносний шлях розв'язується відносно поточного каталогу процесу, і під IIS це папка самого робочого процесу, а не ваш сайт. HostingEnvironment.MapPath перетворює шлях, відносний до сайту, у повний шлях:

csharp
Doconut.DoconutHost.Initialize(options =>
{
    options.LicensePath = HostingEnvironment.MapPath("~/wwwroot/Doconut.Viewer.lic");
});

Якщо файл не існує, Doconut не генерує виключення і не переходить до автоматичного виявлення: ліцензія не завантажується, і переглядач додає водяний знак. Файли ліцензій для кожного плагіна в тій же папці (Doconut.Viewer.<Capability>.lic) читаються разом з нею, тому LicensePath і AddPlugin<...>() працюють разом, коли ліцензії плагінів розташовані поруч із базовою ліцензією.

За потоком

LicenseStream читається один раз під час запуску — це корисно, коли ліцензія надходить з вбудованого ресурсу або сховища секретів, а не з файлу на диску.

csharp
// Precedence: LicenseStream > LicenseContent > LicensePath > auto-search.
Doconut.DoconutHost.Initialize(options =>
{
    options.LicenseStream = licenseStream;
});

За вмістом

LicenseContent приймає сам текст ліцензії — з змінної середовища, бази даних або сховища секретів — тому файл ліцензії не потрібно розгортати разом із сайтом.

csharp
// License XML from a database, an environment variable or a secret store -
// no file on disk. Beaten only by LicenseStream.
Doconut.DoconutHost.Initialize(options =>
{
    options.LicenseContent = Environment.GetEnvironmentVariable("DOCONUT_LICENSE") ?? "";
});

Автоматичне виявлення

Не встановлюйте жодне з трьох, і Doconut сам шукає ліцензію:

csharp
// Configure nothing, and Doconut searches for the license itself, in this order:
//   1. {CurrentDirectory}\wwwroot
//   2. {AppContext.BaseDirectory}\wwwroot   (under IIS: the site's root folder)
// It looks for Doconut.lic first, then Doconut.Viewer.lic, plus any per-plugin
// Doconut.Viewer.<Capability>.lic files alongside it.
Doconut.DoconutHost.Initialize();

Два каталоги у зазначеному порядку та файли, які шукаються:

text
1. {CurrentDirectory}\wwwroot
2. {AppContext.BaseDirectory}\wwwroot

In each folder:
  Doconut.lic                        — if found, this is the only file read
  Doconut.Viewer.lic                 — base viewer license
  Doconut.Viewer.<Capability>.lic    — per-plugin licenses, read only next to Doconut.Viewer.lic

Під IIS та IIS Express, AppContext.BaseDirectory — це коренева папка сайту — та, що містить Web.config, а не його папка bin. Тому ліцензія повинна знаходитися у wwwroot під коренем сайту:

text
MySite\
  Web.config
  Global.asax
  bin\
  wwwroot\
    Doconut.Viewer.lic
    Doconut.Viewer.Converter.lic

У проєкті тримайте wwwroot\*.lic поруч із Web.config і розгорніть папку разом із сайтом. Жоден крок збірки не повинен копіювати її кудись. .lic у будь-якому іншому місці — у bin\, поруч із Web.config або у підпапці wwwroot — ніколи не читається.

Тримайте файли .lic поза системою контролю версій. Розгорніть їх разом із сайтом або надайте ліцензію через LicenseContent або LicenseStream з вашого сховища секретів.

Що відбувається без ліцензії

Відсутність ліцензії не викликає виключення. DoconutHost.Initialize успішно завершується, сайт запускається, і переглядач працює, проте кожна сторінка містить водяний знак оцінки і жодна додаткова можливість не надається.

Файл ліцензії, який знайдено, але відхилено, — це інша ситуація. Недійсний підпис, підробка або збірка поза межами версійного вікна ліцензії змушують OpenDocumentAsync викидати LicenseException з поясненням.

Плагінам потрібна їхня ліцензія під час запуску

Реєстрація плагіна, можливість якого не надається ліцензією, зупиняє застосунок під час запуску. DoconutHost.Initialize викидає виключення у Application_Start:

text
InvalidOperationException: The Converter plugin is registered via AddPlugin but no active
license grants Converter. Remove the AddPlugin<...>() call or install a license (or
trial/demo) that includes Converter.

У System.Web ви не бачите це повідомлення у браузері. Кожен запит до сайту відповідає порожнім 500 — без сторінки помилки, без трасування стеку, нічого в журналі IIS. Виключення записується лише в журнал подій Windows (журнал застосунків, джерело ASP.NET). Якщо весь сайт перестає відповідати одразу після додавання рядка AddPlugin, перевірте файли ліцензій у wwwroot перед кодом: файл плагіна Doconut.Viewer.<Capability>.lic має бути поруч із Doconut.Viewer.lic, і без базової ліцензії файли плагіна взагалі не читаються.

Перевірка завантаженої ліцензії

IDoconutLicenseService — це той самий джерело істини, яке використовує SDK. Отримайте його з DoconutHost.Services, щоб надати автентифікований діагностичний кінцевий пункт або керувати функціональними прапорцями — ніколи не повертаючи вміст ліцензії:

csharp
// GET /License/Status
public ActionResult Status()
{
    var license = Doconut.DoconutHost.Services.GetRequiredService<IDoconutLicenseService>();

    return Json(new
    {
        viewer     = license.IsViewerLicensed || license.IsTemporary,
        temporary  = license.IsTemporary,
        search     = license.IsCapabilityGranted(LicenseCapability.Search),
        annotation = license.IsCapabilityGranted(LicenseCapability.Annotation),
        converter  = license.HasConverter,
        dicom      = license.HasDicom
    }, JsonRequestBehavior.AllowGet);
}

Ліцензія читається один раз у DoconutHost.Initialize. Після заміни файлу ліцензії перезапустіть пул застосунків (або змініть Web.config), щоб Application_Start запустився знову.

Усунення неполадок

СимптомЙмовірна причинаПеревірка
Переглядач працює, але кожна сторінка має водяний знакЛіцензію не знайденоЧи знаходиться .lic у <site root>\wwwroot? Викличте кінцеву точку статусу вище
Кожен запит відповідає порожнім 500 одразу після додавання плагінаЗареєстрований плагін не має ліцензії, що його дозволяєЖурнал подій Windows, джерело ASP.NET; .lic плагіна поруч з Doconut.Viewer.lic
LicensePath працює на вашій машині, але не на серверіВідносний шлях, розв'язаний відносно папки робочого процесуСтворіть його за допомогою HostingEnvironment.MapPath("~/wwwroot/...")
Замінений файл .lic не має ефектуЛіцензія була прочитана під час запуску застосункуПерезапустіть пул застосунків
OpenDocumentAsync викидає LicenseExceptionЛіцензію знайдено, але відхиленоПрочитайте повідомлення про виключення; не показуйте його недовіреним клієнтам

Наступні кроки

Чи була ця сторінка корисною?