Licencjonowanie
Możliwości, poziomy licencji i usługa licencji
Ta strona jest odniesieniem w czasie wykonywania, jak licencja kształtuje zachowanie Doconut: co pozwala każdy stan licencji, jak przyznawane są możliwości i jak sprawdzić to wszystko w kodzie. (Aby wczytać licencję, zobacz Konfiguracja licencji.)
Stany licencji i ich działanie
| Stan | Otwiera dokumenty? | Znak wodny | Możliwości |
|---|---|---|---|
| Pełna (płatna) licencja (w ramach okna subskrypcji/aktualizacji) | Tak | Brak | Te zakupione (Has* flagi) |
| Tymczasowa licencja (Developer/NFR — licencja ewaluacyjna, przed datą wygaśnięcia) | Tak | Brak | Wszystkie — pełne przyznanie (kanał ewaluacji) |
| Wygasła (tymczasowa licencja po dacie wygaśnięcia lub płatna subskrypcja po dacie odnowienia) | Tak | Znak wodny ewaluacji | Brak przyznanych |
| Brak pliku licencji | Tak | Znak wodny ewaluacji | Brak przyznanych |
| Znaleziono, ale odrzucono (nieprawidłowy podpis, zmodyfikowany, na czarnej liście lub build nowszy niż okno wersji licencji) | Nie — LicenseException przy każdym otwarciu | — | — |
Dwie konsekwencje warte zapamiętania:
- Brak licencji nie jest licencją tymczasową. Gdy nie ma pliku licencji, strony są wyświetlane z znakiem wodnym i żadna możliwość (wyszukiwanie, adnotacje, wtyczki) nie jest aktywna. Pełne, nieoznaczone znakiem wodnym doświadczenie wymaga rzeczywistej Tymczasowej licencji (zdobądź ją).
- Tylko odrzucona licencja blokuje otwieranie. Wygaśnięcie kalendarza/subskrypcji powoduje degradację do renderowania z znakiem wodnym; jednak wdrożenie builda nowszego niż okno wersji licencji jest odrzucane i szybko kończy się niepowodzeniem z
LicenseException, więc łapiesz to przy wdrożeniu — a nie poprzez ciche dostarczanie wyjścia z znakiem wodnym. Ten wyjątek (zOpenDocumentAsync) zawiera powód zLicense.RejectionMessage.
Możliwości
Doconut kontroluje opcjonalną funkcjonalność za pomocą możliwości. Obecnie są to wtyczki Converter i DICOM oraz wbudowane funkcje Search i Annotation, każda przyznawana na podstawie twojej licencji. Podstawowy przeglądarka nie jest możliwością — jest warunkiem wstępnym, udostępnionym jako IsViewerLicensed:
bool viewerLicensed = lic.IsViewerLicensed; // non-TRIAL license present AND covering this build's versionJedyną bramką, której używa cały potok, jest IsCapabilityGranted:
bool searchGranted = lic.IsCapabilityGranted(LicenseCapability.Search);Jej logika, dosłownie z implementacji: aktywna (nieprzeterminowana) Tymczasowa licencja przyznaje wszystkie możliwości — w tym te, które jeszcze nie mają dedykowanego flagi zakupu; rzeczywista zakupiona licencja przyznaje dokładnie swoje flagi Has* i jest domyślnie odrzucająca wszystko, co nie jest zmapowane. (Plik typu TRIAL z przeszłości nie jest uprawnieniem — jest traktowany jako nielicencjonowany: znak wodny, nic nie przyznane.)
Tymczasowe licencje
Tymczasowe licencje (Developer/NFR) są oznaczone tagiem ExpiryNote i posiadają sztywną datę wygaśnięcia:
| Członek | Znaczenie |
|---|---|
IsTemporary | Tag ExpiryNote jest obecny (detekcja odbywa się na podstawie obecności tagu — nigdy nie dopasowuj tekstu notatki, jest dynamiczna) |
ExpiryNote | Tekst informacyjny wbudowany w licencję |
LicenseExpiry | Sztywna data wygaśnięcia (DateTime?) |
Semantyka wygaśnięcia różni się w zależności od poziomu: tymczasowa licencja wygasa w samą datę LicenseExpiry (okno subskrypcji jest ignorowane; tymczasowa licencja bez daty jest traktowana jako wygasła, zabezpieczenie). Wszystkie inne licencje wygasają w dacie okna subskrypcji/aktualizacji.
Odniesienie do IDoconutLicenseService
Uzyskaj IDoconutLicenseService (przestrzeń nazw Doconut.Core.Interfaces) z DoconutHost.Services. Jest to singleton — licencja jest parsowana raz, w DoconutHost.Initialize:
| Członek | Znaczenie |
|---|---|
License | Pełny migawkowy podgląd DoconutLicenseInfo (poniżej) |
IsTrial | Plik typu TRIAL z przeszłości (traktowany jako nielicencjonowany — nie uprawnienie) |
IsTemporary / ExpiryNote / LicenseExpiry | Markery licencji tymczasowej |
IsExpired | Wygasła zgodnie z powyższymi zasadami poziomu |
IsVersionValid | Ten build mieści się w oknie wsparcia licencji |
IsViewerLicensed | Znaleziono plik nie będący TRIAL i wersja jest objęta — podstawowy warunek |
IsCapabilityGranted(cap) | Jedyna bramka możliwości |
HasSearch HasAnnotation HasConverter HasDicom | Udostępniane według flag zakupu poszczególnych możliwości — użyj IsCapabilityGranted dla odpowiedzi uwzględniającej licencję tymczasową |
IsValidForDomain(host) | Pokrycie hosta; licencje V4 używają wildcard *.* |
LicenseRejectionReason | Niepusty ⇒ otwieranie jest blokowane tym komunikatem |
DoconutLicenseInfo udostępnia przyjazny dla wyświetlania migawkowy podgląd dla paneli administracyjnych: Owner, Email, LicenseType, Domain, IsLicenseFileFound, IsVersionValid, IsTrial, IsExpired, flagi Has*, pola licencji tymczasowej oraz 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);
}Sprawdzenie stanu zdrowia
Doconut rejestruje sprawdzenie zdrowia "doconut", które raportuje stan licencji. Klasyczny ASP.NET nie ma własnego punktu końcowego zdrowia, więc udostępnij go z kontrolera:
// 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");
}Podłącz go do swojego monitoringu, a wygasająca subskrypcja stanie się alarmem zamiast zgłoszenia wsparcia. Zobacz DoconutHost po wartości statusów.
Aktualizacje wersji
Licencja obejmuje okno wersji. Aktualizacja pakietu NuGet do builda nowszego niż to okno powoduje, że licencja jest nieważna dla tego builda: IsVersionValid zmienia się na false i otwieranie jest blokowane przy pomocy LicenseException (powód znajduje się w License.RejectionMessage) — celowo szybkie zakończenie, aby przestarzały lub nielicencjonowany build został wykryty przy wdrożeniu, a nie cicho znakowany w produkcji. Odnów subskrypcję, zamień plik .lic w wwwroot i zresetuj pulę aplikacji, aby DoconutHost.Initialize wczytał nową licencję.
Czy ta strona była pomocna?