Lisans Kurulumu
Doconut'un lisans dosyanızı nerede aradığı
Bir lisans olmadan, Doconut hâlâ belgeleri render eder — her sayfa sadece bir değerlendirme filigranı taşır. Bu sayfa, bir lisans sağlamanın dört yolunu ve birden fazla ayarlandığında tam önceliği kapsar.
Lisans sağlamak için dört yol
Dört tane vardır: DoconutOptions üzerindeki üç açık kaynak — bir akış, ham içerik veya bir dosya yolu — ve hiçbiri ayarlanmamışsa otomatik keşif. Birden fazla ayarlandığında, öncelik tam olarak şöyledir:
LicenseStream, LicenseContent'ı, LicensePath'ı ve otomatik aramayı geçer.
Yola göre
LicensePath, File.Exists'a tam olarak verildiği gibi geçirilir. Göreceli bir yol, işlemin şu anki çalışma dizinine göre çözülür — projenizin klasörüne değil ve Program.cs'ın bulunduğu klasöre de değil. Yol çözülemezse, Doconut hata atmaz ve otomatik aramaya geri dönmez — sadece lisans yüklemez ve görüntüleyici filigran ekler. Otomatik arama yalnızca LicensePath, LicenseContent veya LicenseStream'dan hiçbiri ayarlı değilse çalışır. Aynı klasördeki (Doconut.Viewer.<Capability>.lic) per‑plugin lisans dosyaları bununla birlikte okunur, böylece LicensePath ve AddPlugin<...>(), eklenti lisansları temel lisansın yanında bulunduğunda birlikte çalışır.
Mutlak bir yol tercih edin (örneğin IWebHostEnvironment.WebRootPath veya AppContext.BaseDirectory'dan oluşturulan), ya da LicensePath'ı tamamen atlayıp aşağıdaki otomatik keşfe güvenin.
builder.Services.AddDoconut(options =>
{
options.LicensePath = Path.Combine(AppContext.BaseDirectory, "wwwroot", "Doconut.Viewer.lic");
});Akışa göre
LicenseStream, başlangıçta bir kez okunur — lisansın bir dosyadan değil gizli bir depodan gelmesi durumunda kullanışlıdır.
// Öncelik: LicenseStream > LicenseContent > LicensePath > otomatik arama.
builder.Services.AddDoconut(options =>
{
options.LicenseStream = licenseStream;
});İçeriğe göre
LicenseContent, lisans metnini doğrudan kabul eder — bir ortam değişkeninden, bir veritabanından veya bir gizli yöneticiden:
// License XML bir veritabanından, ortam değişkeninden veya gizli yöneticiden —
// diskte dosya yok. Yalnızca LicenseStream tarafından geçilir.
builder.Services.AddDoconut(options =>
{
options.LicenseContent = Environment.GetEnvironmentVariable("DOCONUT_LICENSE") ?? "";
});Otomatik keşif
Üç açık kaynağın hiçbirini yapılandırmazsanız, Doconut lisansı kendisi arar:
// Hiçbir şey yapılandırma ve Doconut lisansı kendisi arar, yalnızca bu iki klasörde:
// 1. {CurrentDirectory}/wwwroot
// 2. {AppContext.BaseDirectory}/wwwroot (build çıktısı klasörünün içinde wwwroot)
// Önce Doconut.lic, ardından Doconut.Viewer.lic, ayrıca eklenti başına herhangi bir dosya
// Doconut.Viewer.<Capability>.lic dosyaları yanına.
builder.Services.AddDoconut();Sorgulama klasörleri, sırayla, ve her birinde aranan dosya adları:
1. {CurrentDirectory}/wwwroot
2. {AppContext.BaseDirectory}/wwwroot
Filenames (checked in each folder above, in order):
Doconut.lic — base viewer license (checked first)
Doconut.Viewer.lic — base viewer license
Doconut.Viewer.<Capability>.lic — per-plugin license, alongside the base licensewwwroot klasörünün dışındaki hiçbir şey okunmaz: çıktı klasörünün içindeki bir .lic veya wwwroot/lib'deki bir şey göz ardı edilir.
Lisansı çıktı klasörünüze kopyalayın
İşlem proje klasöründen çalıştırılmadığında — yayınlanmış bir uygulama, IIS, bir konteyner, bir test çalıştırıcı — ilk sorgulama kaçırılır ve ikinci sorgulama, {AppContext.BaseDirectory}/wwwroot, dosyayı bulmak zorundadır. SDK'nın kendi test uygulaması, her derlemede bu MSBuild hedefiyle lisansları oraya kopyalar:
<Target Name="CopyLicensesToOutput" AfterTargets="Build">
<ItemGroup>
<DoconutLicenseFiles Include="$(MSBuildProjectDirectory)\wwwroot\*.lic" />
<StaleOutputLicenses Include="$(OutDir)wwwroot\*.lic" />
</ItemGroup>
<!-- İlk olarak sil, böylece wwwroot içindeki bir .lic dosyasının yeniden adlandırılması veya kaldırılması da çıktıda yer almaz. -->
<Delete Files="@(StaleOutputLicenses)" />
<Copy SourceFiles="@(DoconutLicenseFiles)" DestinationFolder="$(OutDir)wwwroot" />
</Target>Hedef $(OutDir)wwwroot olmalıdır: çıktı köküne kopyalanan bir .lic, otomatik arama tarafından asla bulunmaz. Bu sayfadaki LicensePath örnekleri aynı konuma işaret eder.
.licdosyalarını kaynak kontrolünden uzak tutun — uygulamanın yanına dağıtın, ya da lisansı gizli deponuzdanLicenseContentveyaLicenseStreamaracılığıyla enjekte edin.
Lisans olmadan ne olur
Eksik bir lisans hata oluşturmaz. AddDoconut() başarılı olur, uygulama başlar ve görüntüleyici çalışır — ancak her sayfa bir değerlendirme filigranı taşır ve hiçbir isteğe bağlı yetenek verilmez.
Bulunan ancak reddedilen bir lisans dosyası farklıdır. Geçersiz bir imza, müdahale, kara listeye alma veya lisansın sürüm penceresinin dışındaki bir derleme, OpenDocumentAsync'nin LicenseException'ı License.RejectionMessage ile atmasına neden olur. Reddetme mesajı olmayan takvim süresi dolmuş bir lisans, filigranlı modda devam eder.
Eklentiler yeteneklere ihtiyaç duyar
İlgili bir yetki olmadan bir eklenti kaydetmek farklıdır: eksik bir lisans, eski bir TRIAL dosyası veya o yeteneği içermeyen bir ücretli lisans için, AddDoconut() InvalidOperationException hatası fırlatır, bu yüzden uygulama başlatılamaz. Örneğin, Converter yetkisini veren bir lisans olmadan Converter eklentisini kaydetmek:
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.Mesaj, düzeltmeyi doğrudan söyler: ya o eklenti için options.AddPlugin<...>() çağrısını kaldırın, ya da yeteneği veren bir ücretli lisans ya da aktif bir Geçici/Demo (NFR) lisansı kurun. Geçici kayıtların süresi dolmuş olsa bile hayatta kalmasına izin verilir, böylece önceden yapılandırılmış bir uygulama yeniden başlatma sırasında çökmek yerine çalışma zamanında işlevselliğini azaltabilir; süresi dolduğunda ise yetenekleri hâlâ iptal edilir.
Yüklenen lisansı doğrula
IDoconutLicenseService'ı kullanın, SDK tarafından kullanılan aynı gerçek kaynağı, kimliği doğrulanmış bir tanı uç noktasını ortaya çıkarmak veya özellik bayraklarını yönlendirmek için. Lisans içeriğini veya anahtarlarını döndürmeyin.
app.MapGet("/api/doconut/license", (IDoconutLicenseService license) => Results.Ok(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
}));Lisans, AddDoconut() kaydı sırasında okunur. ResetLicense şu anda aktif bir yeniden yükleme yolu olmayan bir uyumluluk özelliğidir, bu yüzden bir lisans dosyasını değiştirmek uygulamayı yeniden başlatmayı gerektirir.
Sorun giderme matrisi
| Semptom | Muhtemel neden | Kontrol |
|---|---|---|
| Görüntüleyici çalışıyor ancak her sayfa filigranlı | Lisans yüklenmedi veya lisans takvim süresi dolmuş | IDoconutLicenseService'ı çözün; çıktı dizinini ve işlem çalışma dizinini doğrulayın |
AddDoconut() bir eklenti için hata fırlatır | Lisans o eklenti yeteneğini vermiyor | IsCapabilityGranted(...)'ı kontrol edin ve satın almadığınız kayıtları kaldırın |
| Yapılandırılmış bir göreli yol yerel olarak çalışıyor ancak IIS/konteynerde çalışmıyor | İşlem çalışma dizini değişti | AppContext.BaseDirectory'ı veya mutlak bir yolu kullanın |
Değiştirilen .lic dosyası etkisiz | Tekil lisans hizmeti zaten oluşturulmuştu | Uygulamayı yeniden başlatın |
OpenDocumentAsync LicenseException hatası fırlatır | İmza, domain, sürüm penceresi, kara liste veya eklenti çalışma zamanı kapısı lisansı reddetti | İstisna/red mesajını güvensiz istemcilere göstermeden okuyun |
Sonraki adımlar
- Lisanslama — yetenekler, lisans katmanları ve çalışma zamanında neyin yüklendiğini doğrulama.
- Sorun Giderme — filigranlar, reddedilen lisanslar ve yetenek hataları.
Bu sayfa yardımcı oldu mu?