Licencjonowanie

Funkcje, poziomy licencji i usługa licencji

Ta strona jest odniesieniem w czasie działania, jak licencja kształtuje zachowanie Doconut: co pozwala każdy stan licencji, jak przyznawane są funkcje i jak sprawdzić to wszystko w kodzie. (Aby wczytać licencję, zobacz Rozpoczęcie → Konfiguracja licencji.)

Stany licencji i ich działanie

StanOtwiera dokumenty?Znak wodnyFunkcje
Pełna (płatna) licencja (w ramach okna subskrypcji/aktualizacji)TakBrakTe zakupione (Has* flags)
Tymczasowa licencja (Developer/NFR — licencja ewaluacyjna, przed datą wygaśnięcia)TakBrakWszystkie — pełne przyznanie (kanał ewaluacji)
Wygasła (tymczasowa licencja po dacie wygaśnięcia lub płatna subskrypcja po dacie odnowienia)TakZnak wodny ewaluacjiBrak przyznanych
Brak pliku licencjiTakZnak wodny ewaluacjiBrak przyznanych
Znaleziono, ale odrzucono (nieprawidłowy podpis, zmodyfikowany, na czarnej liście lub kompilacja nowsza 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 funkcja (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 wyświetlanie z znakiem wodnym; jednak wdrożenie kompilacji nowszej niż okno wersji licencji jest odrzucane i szybko kończy się niepowodzeniem z LicenseException, więc łapiesz to przy wdrożeniu — a nie przez ciche dostarczanie wyjścia z znakiem wodnym. Ten wyjątek (z OpenDocumentAsync) zawiera powód z License.RejectionMessage.

Funkcje

Doconut kontroluje opcjonalną funkcjonalność za pomocą funkcji. Obecnie są to wtyczki Converter i DICOM dostępne na żądanie oraz wbudowane funkcje Search i Annotation, każda przyznawana na podstawie twojej licencji. Podstawowy przeglądarka nie jest funkcją — jest wymogiem wstępnym, udostępnionym jako IsViewerLicensed:

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

Jedyną bramką, której używa cały potok, jest IsCapabilityGranted:

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

Jej logika, dosłownie z implementacji: aktywna (nieprzeterminowana) Tymczasowa licencja przyznaje wszystkie funkcje — w tym te, które jeszcze nie mają dedykowanego flagi zakupu; rzeczywista zakupiona licencja przyznaje dokładnie swoje flagi Has* i ma domyślne odrzucenie dla wszystkiego, co nie jest zmapowane. (Plik typu TRIAL z dziedzictwa nie jest uprawnieniem — jest traktowany jako nielicencjonowany: znak wodny, nic nie przyznane.)

Licencje tymczasowe

Normalne wyszukiwanie i adnotacje używają istniejących funkcji bezpośrednio.

Licencje tymczasowe (Developer/NFR) są oznaczone tagiem ExpiryNote i mają sztywną datę wygaśnięcia:

CzłonekZnaczenie
IsTemporaryTag ExpiryNote jest obecny (detekcja odbywa się na podstawie obecności tagu — nigdy nie dopasowuj tekstu notatki, jest dynamiczna)
ExpiryNoteInformacyjny tekst osadzony w licencji
LicenseExpirySztywna data wygaśnięcia (DateTime?)

Semantyka wygaśnięcia różni się w zależności od poziomu: licencja tymczasowa wygasa w samą datę LicenseExpiry (okno subskrypcji jest ignorowane; licencja tymczasowa bez daty jest traktowana jako wygasła, zabezpieczenie). Wszystkie inne licencje wygasają w dacie swojego okna subskrypcji/aktualizacji.

Odwołanie do IDoconutLicenseService

Wstrzyknij IDoconutLicenseService (przestrzeń nazw Doconut.Core.Interfaces; zarejestrowany jako singleton — licencja jest parsowana raz przy uruchomieniu):

CzłonekZnaczenie
LicensePełny migawkowy DoconutLicenseInfo (poniżej)
IsTrialPlik typu TRIAL z dziedzictwa (traktowany jako nielicencjonowany — nie uprawnienie)
IsTemporary / ExpiryNote / LicenseExpiryMarkery licencji tymczasowej
IsExpiredWygasła zgodnie z powyższymi zasadami poziomu
IsVersionValidTa kompilacja mieści się w oknie wsparcia licencji
IsViewerLicensedZnaleziono plik nie będący TRIAL i wersja jest objęta — podstawowy wymóg
IsCapabilityGranted(cap)Jedyna bramka funkcji
HasSearch HasAnnotation HasConverter HasDicomUdostępnione flagi zakupu per-funkcję — użyj IsCapabilityGranted dla odpowiedzi uwzględniającej tymczasowość
IsValidForDomain(host)Pokrycie hosta; licencje V4 używają wildcard *.*
LicenseRejectionReasonNiepusty ⇒ otwieranie jest blokowane tą wiadomością

DoconutLicenseInfo udostępnia przyjazną dla wyświetlania migawkę dla paneli administracyjnych: Owner, Email, LicenseType, Domain, IsLicenseFileFound, IsVersionValid, IsTrial, IsExpired, flagi Has*, pola licencji tymczasowej oraz RejectionMessage.

csharp
// Feature-flag your UI from the same source of truth the SDK uses
app.MapGet("/api/features", (IDoconutLicenseService lic) => Results.Ok(new
{
    viewer     = lic.IsViewerLicensed || lic.IsTemporary,
    search     = lic.IsCapabilityGranted(LicenseCapability.Search),
    annotation = lic.IsCapabilityGranted(LicenseCapability.Annotation),
    conversion = lic.HasConverter,
    dicom      = lic.HasDicom,
}));

Sprawdzenie stanu

AddDoconut() rejestruje sprawdzenie stanu "doconut", które raportuje stan licencji/wygaśnięcia poprzez standardowy mechanizm ASP.NET Core:

csharp
app.MapHealthChecks("/health");

Podłącz to do monitoringu, a wygasająca subskrypcja stanie się alertem zamiast zgłoszenia wsparcia.

Uaktualnienia wersji

Licencja obejmuje okno wersji. Aktualizacja pakietu NuGet do kompilacji nowszej niż to okno powoduje, że licencja jest nieważna dla tej kompilacji: 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ła lub nielicencjonowana kompilacja została wykryta przy wdrożeniu, a nie cicho znakowana w produkcji. Odnów subskrypcję, wymień plik .lic i zrestartuj aplikację, aby AddDoconut() wczytał nową licencję.

Czy ta strona była pomocna?