Ліцензування
Можливості, рівні ліцензій та сервіс ліцензування
Ця сторінка є довідником під час виконання щодо того, як ліцензія формує поведінку Doconut: що дозволяє кожен стан ліцензії, як надаються можливості та як перевірити все це з коду. (Для завантаження ліцензії дивіться Налаштування ліцензії.)
Стани ліцензії та їх функції
| Стан | Відкриває документи? | Водяний знак | Можливості |
|---|---|---|---|
| Повна (платна) ліцензія (в межах її періоду підписки/оновлення) | Так | Немає | Ті, що придбані (Has* flags) |
| Тимчасова ліцензія (Developer/NFR — ліцензія оцінки, до дати закінчення) | Так | Немає | Всі — загальне надання (оціночна воронка) |
| Прострочена (тимчасова ліцензія після дати закінчення або платна підписка після дати поновлення) | Так | Водяний знак оцінки | Не надано |
| Відсутній файл ліцензії | Так | Водяний знак оцінки | Не надано |
| Знайдено, але відхилено (недійсний підпис, підробка, в чорному списку або збірка новіша за вікно версії ліцензії) | Ні — LicenseException на кожному відкритті | — | — |
Дві важливі наслідки:
- Відсутня ліцензія не є тимчасовою ліцензією. При відсутності файлу ліцензії сторінки відображаються з водяним знаком і жодна можливість (пошук, анотації, плагіни) не активна. Повнофункціональний, безводяний досвід вимагає реальної Тимчасової ліцензії (отримати одну).
- Лише відхилена ліцензія блокує відкриття. Закінчення терміну календаря/підписки призводить до відображення з водяним знаком; проте розгортання збірки новішої, ніж вікно версії ліцензії відхиляється і швидко завершується з
LicenseException, тому ви ловите це під час розгортання — а не тихо відправляючи водяний вихід. Це виключення (зOpenDocumentAsync) містить причину зLicense.RejectionMessage.
Можливості
Doconut контролює додаткову функціональність за допомогою можливості. Сьогодні це плагіни Converter та DICOM, а також вбудовані функції Search і Annotation, кожна з яких надається вашою ліцензією. Базовий переглядач не є можливістю — це передумова, представлена як IsViewerLicensed:
bool viewerLicensed = lic.IsViewerLicensed; // non-TRIAL license present AND covering this build's versionЄдиний шлюз, який використовується всім конвеєром, — IsCapabilityGranted:
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.
// 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 не має власної точки здоров'я, тому відкрийте її через контролер:
// 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 завантажив нову ліцензію.
Чи була ця сторінка корисною?