Lisanslama
Yetenekler, lisans katmanları ve lisans hizmeti
Bu sayfa, bir lisansın Doconut'un davranışını nasıl şekillendirdiğine dair çalışma zamanı referansıdır: her lisans durumunun neyi izin verdiği, yeteneklerin nasıl verildiği ve tüm bunların koddan nasıl inceleneceği. (Bir lisansı yüklemek için, Lisans Kurulumu bölümüne bakın.)
Lisans durumları ve ne yaptıkları
| Durum | Belge açar mı? | Filigran | Yetenekler |
|---|---|---|---|
| Tam (ücretli) lisans (abonelik/güncelleme penceresi içinde) | Evet | Yok | Satın alınanlar (Has* bayrakları) |
| Geçici lisans (Geliştirici/NFR — değerlendirme lisansı, son tarihinden önce) | Evet | Yok | Tümü — kapsamlı izin (değerlendirme akışı) |
| Süresi dolmuş (son tarihi geçmiş geçici lisans veya yenileme tarihini geçmiş ücretli abonelik) | Evet | Değerlendirme filigranı | Hiçbir şey verilmedi |
| Lisans dosyası hiç yok | Evet | Değerlendirme filigranı | Hiçbir şey verilmedi |
| Bulundu ama reddedildi (geçersiz imza, değiştirilmiş, kara listeye alınmış veya lisansın sürüm penceresinden daha yeni bir yapı) | Hayır — her açmada LicenseException | — | — |
İki önemli sonuç:
- Eksik bir lisans geçici lisans değildir. Lisans dosyası olmadığında, sayfalar filigranlı olarak gösterilir ve hiçbir yetenek (arama, açıklama, eklentiler) etkin değildir. Tam özellikli, filigransız deneyim gerçek bir Geçici lisans gerektirir (bir tane alın).
- Yalnızca reddedilen bir lisans açmayı engeller. Takvim/abonelik süresinin dolması filigranlı gösterime düşer; ancak bir yapı lisansın sürüm penceresinden daha yeni olduğunda reddedilir ve
LicenseExceptionile hızlıca başarır, böylece dağıtımda yakalarsınız — sessizce filigranlı çıktı göndermek yerine. Bu istisna (OpenDocumentAsync'tan)License.RejectionMessageiçindeki nedeni taşır.
Yetenekler
Doconut, isteğe bağlı işlevselliği yetenek ile kontrol eder. Bugün bunlar, isteğe bağlı Converter ve DICOM eklentileri ile yerleşik Search ve Annotation özellikleridir; her biri lisansınız tarafından verilir. Temel görüntüleyici bir yetenek değildir — ön koşuldur ve IsViewerLicensed olarak ortaya çıkar:
bool viewerLicensed = lic.IsViewerLicensed; // non-TRIAL license present AND covering this build's versionTüm işlem hattının kullandığı tek kapı IsCapabilityGranted'dır:
bool searchGranted = lic.IsCapabilityGranted(LicenseCapability.Search);Mantığı, uygulamadan kelimesi kelimesine: aktif (süresi dolmamış) Geçici lisans tüm yetenekleri verir — henüz özel bir satın alma bayrağı olmayan yetenekler dahil; gerçek bir satın alınmış lisans yalnızca Has* bayraklarını verir ve eşlenmemiş şeyler için varsayılan olarak reddeder. (Eski bir TRIAL türü dosya hak değildir — lisanssız olarak değerlendirilir: filigranlı, hiçbir şey verilmez.)
Geçici lisanslar
Geçici (Geliştirici/NFR) lisanslar bir ExpiryNote etiketiyle işaretlenir ve kesin bir son tarih taşır:
| Üye | Anlam |
|---|---|
IsTemporary | Bir ExpiryNote etiketi bulunur (algılama etiket varlığına dayanır — notun metniyle eşleşmez, dinamikdir) |
ExpiryNote | Lisansa gömülü bilgilendirici metin |
LicenseExpiry | Kesin son tarih (DateTime?) |
Son tarih anlamı katmana göre değişir: geçici bir lisans yalnızca LicenseExpiry tarihi itibarıyla sona erer (abonelik penceresi göz ardı edilir; tarih eksikse geçici lisans süresi dolmuş kabul edilir, güvenli hata). Diğer tüm lisanslar abonelik/güncelleme penceresi tarihine göre sona erer.
IDoconutLicenseService referansı
IDoconutLicenseService (namespace Doconut.Core.Interfaces) DoconutHost.Services üzerinden çözün. Bu bir singleton'dır — lisans bir kez DoconutHost.Initialize içinde ayrıştırılır:
| Üye | Anlam |
|---|---|
License | Tam DoconutLicenseInfo anlık görüntüsü (aşağıda) |
IsTrial | Eski bir TRIAL türü dosya (lisanssız olarak değerlendirilir — hak değildir) |
IsTemporary / ExpiryNote / LicenseExpiry | Geçici lisans işaretçileri |
IsExpired | Yukarıdaki katman kurallarına göre süresi dolmuş |
IsVersionValid | Bu yapı lisansın destek penceresi içinde |
IsViewerLicensed | TRIAL olmayan dosya bulunmuş ve sürüm kapsanmış — temel ön koşul |
IsCapabilityGranted(cap) | Tek yetenek kapısı |
HasSearch HasAnnotation HasConverter HasDicom | Yeteneğe göre satın alma bayrakları — geçici farkındalıklı cevap için IsCapabilityGranted kullanın |
IsValidForDomain(host) | Host kapsamı; V4 lisansları *.* joker karakterini kullanır |
LicenseRejectionReason | Boş değil ⇒ açma bu mesajla engellenir |
DoconutLicenseInfo, yönetim panelleri için görüntü dostu bir anlık görüntü sunar: Owner, Email, LicenseType, Domain, IsLicenseFileFound, IsVersionValid, IsTrial, IsExpired, Has* bayrakları, geçici lisans alanları ve 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);
}Sağlık kontrolü
Doconut, lisans durumunu raporlayan bir "doconut" sağlık kontrolü kaydeder. Klasik ASP.NET'in kendi sağlık uç noktası yoktur, bu yüzden bir denetleyiciden ortaya çıkarın:
// 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");
}Bunu izleme sisteminize bağlayın ve süresi dolan bir abonelik destek bileti yerine bir uyarı haline gelir. Durum değerleri için DoconutHost bölümüne bakın.
Sürüm yükseltmeleri
Bir lisans bir sürüm penceresini kapsar. NuGet paketini bu pencerenin daha yeni bir yapısına güncellemek, lisansı bu yapı için geçersiz kılar: IsVersionValid false olur ve açma LicenseException ile engellenir (License.RejectionMessage içinde neden bulunur) — kasıtlı olarak hızlı başarır, böylece eski veya lisanssız bir yapı dağıtımda yakalanır, sessizce üretim çıktısına filigran eklemek yerine. Aboneliği yenileyin, wwwroot içindeki .lic dosyasını değiştirin ve uygulama havuzunu yeniden başlatın, böylece DoconutHost.Initialize yeni lisansı yükler.
Bu sayfa yardımcı oldu mu?