Настройка лицензии
Где Doconut ищет ваш файл лицензии под IIS
Без лицензии Doconut всё равно отображает документы — каждая страница просто содержит водяной знак оценки. На этой странице рассматриваются четыре способа предоставить лицензию в Global.asax, где Doconut ищет её, если вы не указываете никакую, и что происходит, когда лицензия плагина отсутствует.
Четыре способа предоставить лицензию
Существует три явных источника в DoconutOptions — путь к файлу, поток или необработанное содержимое — плюс автоматическое обнаружение, когда ни один из них не задан. Все они читаются один раз, в DoconutHost.Initialize. Когда задано более одного, порядок приоритетов точен:
LicenseStream побеждает LicenseContent, побеждает LicensePath, побеждает автоматическое обнаружение.
По пути
Передайте LicensePath полный путь. Относительный путь разрешается относительно текущего каталога процесса, а под IIS это собственный каталог рабочего процесса, а не ваш сайт. HostingEnvironment.MapPath преобразует путь, относительный к сайту, в полный:
Doconut.DoconutHost.Initialize(options =>
{
options.LicensePath = HostingEnvironment.MapPath("~/wwwroot/Doconut.Viewer.lic");
});Если файл не существует, Doconut не генерирует исключение и не переходит к автоматическому обнаружению: лицензия не загружается, и просмотрщик отображает водяные знаки. Файлы лицензий для каждого плагина в той же папке (Doconut.Viewer.<Capability>.lic) читаются вместе с ней, поэтому LicensePath и AddPlugin<...>() работают совместно, когда лицензии плагинов находятся рядом с основной лицензией.
По потоку
LicenseStream читается один раз при запуске — полезно, когда лицензия поступает из встроенного ресурса или секретного хранилища, а не из файла на диске.
// Приоритет: LicenseStream > LicenseContent > LicensePath > авто-поиск.
Doconut.DoconutHost.Initialize(options =>
{
options.LicenseStream = licenseStream;
});По содержимому
LicenseContent принимает сам текст лицензии — из переменной окружения, базы данных или секретного хранилища — поэтому файл лицензии не требуется размещать вместе с сайтом.
// XML лицензии из базы данных, переменной окружения или хранилища секретов -
// нет файла на диске. Превзойдён только LicenseStream.
Doconut.DoconutHost.Initialize(options =>
{
options.LicenseContent = Environment.GetEnvironmentVariable("DOCONUT_LICENSE") ?? "";
});Автоматическое обнаружение
Не задайте ни один из трёх, и Doconut самостоятельно ищет лицензию:
// Ничего не настраивая, Doconut ищет лицензию самостоятельно в следующем порядке:
// 1. {CurrentDirectory}\wwwroot
// 2. {AppContext.BaseDirectory}\wwwroot (в IIS: корневая папка сайта)
// Сначала ищет Doconut.lic, затем Doconut.Viewer.lic, плюс любые per-plugin
// файлы Doconut.Viewer.<Capability>.lic рядом с ним.
Doconut.DoconutHost.Initialize();Два каталога, в указанном порядке, и файлы, которые ищутся:
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 под корнем сайта:
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:
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, чтобы открыть аутентифицированную диагностическую конечную точку или управлять флагами функций — никогда не возвращайте содержимое лицензии:
// 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 | Лицензия найдена, но отклонена | Прочитайте сообщение об исключении; не показывайте его недоверенным клиентам |
Следующие шаги
- Лицензирование — возможности и как проверять их во время выполнения.
- Устранение неполадок — водяные знаки, сбои при запуске и другие симптомы.
Была ли эта страница полезной?