Ліцензування

Можливості, рівні ліцензій та сервіс ліцензування

Ця сторінка є довідником під час виконання щодо того, як ліцензія формує поведінку Doconut: що дозволяє кожен стан ліцензії, як надаються можливості та як перевірити все це з коду. (Для завантаження ліцензії дивіться Налаштування ліцензії.)

Стани ліцензії та їх функції

СтанВідкриває документи?Водяний знакМожливості
Повна (платна) ліцензія (в межах її періоду підписки/оновлення)ТакНемаєТі, що придбані (Has* flags)
Тимчасова ліцензія (Developer/NFR — ліцензія оцінки, до дати закінчення)ТакНемаєВсі — загальне надання (оціночна воронка)
Прострочена (тимчасова ліцензія після дати закінчення або платна підписка після дати поновлення)ТакВодяний знак оцінкиНе надано
Відсутній файл ліцензіїТакВодяний знак оцінкиНе надано
Знайдено, але відхилено (недійсний підпис, підробка, в чорному списку або збірка новіша за вікно версії ліцензії)Ні — LicenseException на кожному відкритті——

Дві важливі наслідки:

  • Відсутня ліцензія не є тимчасовою ліцензією. При відсутності файлу ліцензії сторінки відображаються з водяним знаком і жодна можливість (пошук, анотації, плагіни) не активна. Повнофункціональний, безводяний досвід вимагає реальної Тимчасової ліцензії (отримати одну).
  • Лише відхилена ліцензія блокує відкриття. Закінчення терміну календаря/підписки призводить до відображення з водяним знаком; проте розгортання збірки новішої, ніж вікно версії ліцензії відхиляється і швидко завершується з LicenseException, тому ви ловите це під час розгортання — а не тихо відправляючи водяний вихід. Це виключення (з OpenDocumentAsync) містить причину з License.RejectionMessage.

Можливості

Doconut контролює додаткову функціональність за допомогою можливості. Сьогодні це плагіни Converter та DICOM, а також вбудовані функції Search і Annotation, кожна з яких надається вашою ліцензією. Базовий переглядач не є можливістю — це передумова, представлена як IsViewerLicensed:

csharp
bool viewerLicensed = lic.IsViewerLicensed; // non-TRIAL license present AND covering this build's version

Єдиний шлюз, який використовується всім конвеєром, — IsCapabilityGranted:

csharp
bool searchGranted = lic.IsCapabilityGranted(LicenseCapability.Search);

Його логіка, дослівно з реалізації: активна (не прострочена) Тимчасова ліцензія надає усі можливості — включаючи можливості, які ще не мають окремого прапорця покупки; реальна придбана ліцензія надає саме свої прапорці Has* і має default-deny для всього, що не зіставлено. (Файл старого типу TRIAL не є правом — його розглядають як неліцензований: водяний знак, нічого не надано.)

Тимчасові ліцензії

Тимчасові (Developer/NFR) ліцензії позначаються тегом ExpiryNote і мають жорстку дату закінчення:

ПолеЗначення
IsTemporaryТег ExpiryNote присутній (виявлення за наявністю тегу — ніколи не порівнювати текст нотатки, він динамічний)
ExpiryNoteІнформаційний текст, вбудований у ліцензію
LicenseExpiryЖорстка дата закінчення (DateTime?)

Семантика закінчення залежить від рівня: тимчасова ліцензія закінчується лише у дату LicenseExpiry (тільки дата) (вікно підписки ігнорується; тимчасова ліцензія без дати розглядається як прострочена, безпечний режим). Усі інші ліцензії закінчуються у дату їхнього вікна підписки/оновлення.

Посилання на IDoconutLicenseService

Отримайте IDoconutLicenseService (простір імен Doconut.Core.Interfaces) з DoconutHost.Services. Це синглтон — ліцензія аналізується один раз у DoconutHost.Initialize:

ПолеЗначення
LicenseПовний знімок DoconutLicenseInfo (нижче)
IsTrialФайл старого типу TRIAL (розглядається як неліцензований — не право)
IsTemporary / ExpiryNote / LicenseExpiryМаркері тимчасової ліцензії
IsExpiredПрострочена згідно правил рівнів вище
IsVersionValidЦя збірка входить у вікно підтримки ліцензії
IsViewerLicensedЗнайдено файл, не TRIAL, і версія покрита — базова передумова
IsCapabilityGranted(cap)Єдиний шлюз можливості
HasSearch HasAnnotation HasConverter HasDicomВипущено згідно прапорців покупки кожної можливості — використовуйте IsCapabilityGranted для відповіді з урахуванням тимчасової ліцензії
IsValidForDomain(host)Покриття хоста; ліцензії V4 використовують шаблон *.*
LicenseRejectionReasonНе порожнє ⇒ відкриття блокується цим повідомленням

DoconutLicenseInfo надає зручний для відображення знімок для адмін‑панелей: Owner, Email, LicenseType, Domain, IsLicenseFileFound, IsVersionValid, IsTrial, IsExpired, прапорці Has*, поля тимчасової ліцензії та RejectionMessage.

csharp
// GET /Features - feature-flag your UI from the same source of truth the SDK uses
public ActionResult Index()
{
    var lic = Doconut.DoconutHost.Services.GetRequiredService<IDoconutLicenseService>();

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

Перевірка стану

Doconut реєструє перевірку стану "doconut", яка повідомляє про стан ліцензії. Класичний ASP.NET не має власної точки здоров'я, тому відкрийте її через контролер:

csharp
// GET /Health - Doconut registers a "doconut" health check that reports the license state:
// Healthy (valid), Degraded (trial or no license file), Unhealthy (expired).
public async Task<ActionResult> Index()
{
    var health = Doconut.DoconutHost.Services.GetRequiredService<HealthCheckService>();
    HealthReport report = await health.CheckHealthAsync();

    Response.StatusCode = report.Status == HealthStatus.Unhealthy ? 503 : 200;
    return Content(report.Status.ToString(), "text/plain");
}

Підключіть її до вашого моніторингу, і закінчення підписки стане сповіщенням, а не заявкою в підтримку. Дивіться DoconutHost для значень статусу.

Оновлення версій

Ліцензія охоплює вікно версії. Оновлення пакету NuGet до збірки новішої, ніж це вікно робить ліцензію недійсною для даної збірки: IsVersionValid стає false і відкриття блокується з LicenseException (причина в License.RejectionMessage) — навмисно швидко завершити, щоб застаріла або неліцензована збірка була виявлена під час розгортання, а не тихо водяним знаком у продуктивному виводі. Оновіть підписку, замініть .lic у wwwroot і перезапустіть пул додатків, щоб DoconutHost.Initialize завантажив нову ліцензію.

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