Lisans Kurulumu
Doconut'un lisans dosyanızı nerede aradığını
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 geçerli önceliği açıklar.
Lisans Sağlamanın Dört Yolu
Dört adet vardır: DoconutOptions içinde üç açık kaynak — bir akış, ham içerik veya bir dosya yolu — ve hiçbiri ayarlanmadığında otomatik keşif. Birden fazla kaynak ayarlandığında, öncelik kesin olarak şu şekildedir:
LicenseStream > LicenseContent > LicensePath > otomatik arama.
Yol ile
LicensePath tam olarak verildiği gibi File.Exists'e 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 dosyasının bulunduğu klasöre de değil. Yol çözülemezse, Doconut bir istisna 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 hiçbiri ayarlı olmadığında çalışır.
Mutlak bir yol tercih edin (örneğin IWebHostEnvironment.WebRootPath veya AppContext.BaseDirectory'den oluşturulan), ya da LicensePath'i tamamen atlayıp aşağıdaki otomatik keşfe güvenin.
builder.Services.AddDoconut(options =>
{
options.LicensePath = Path.Combine(AppContext.BaseDirectory, "Doconut.Viewer.lic");
});Akış ile
LicenseStream başlangıçta bir kez okunur — lisansın diskteki bir dosyadan değil gizli bir depodan gelmesi durumunda kullanışlıdır.
// Precedence: LicenseStream > LicenseContent > LicensePath > auto-search.
builder.Services.AddDoconut(options =>
{
options.LicenseStream = licenseStream;
});İçerik ile
LicenseContent lisans metnini doğrudan kabul eder — bir ortam değişkeni, bir veritabanı veya bir gizli yönetici aracılığıyla:
// License XML from a database, environment variable, or secret manager —
// no file on disk. Beaten only by LicenseStream.
builder.Services.AddDoconut(options =>
{
options.LicenseContent = Environment.GetEnvironmentVariable("DOCONUT_LICENSE") ?? "";
});Otomatik Keşif
Üç açık kaynağın hiçbirini yapılandırmazsanız, Doconut kendiliğinden lisansı arar:
// Configure nothing, and Doconut searches for the license itself:
// 1. {CurrentDirectory}/wwwroot
// 2. {CurrentDirectory}/wwwroot/lib
// 3. AppContext.BaseDirectory (the build output folder)
// It looks for Doconut.Viewer.lic plus any per-plugin
// Doconut.Viewer.<Capability>.lic files alongside it.
builder.Services.AddDoconut();Deneme dizinleri sırasıyla ve her birinde aranan dosya adları:
1. {CurrentDirectory}/wwwroot
2. {CurrentDirectory}/wwwroot/lib
3. AppContext.BaseDirectory
Filenames (checked in each directory above, in order):
Doconut.Viewer.lic — base viewer license
Doconut.Viewer.<Capability>.lic — per-plugin license, alongside Doconut.Viewer.licLisansı Çıktı Klasörünüze Kopyalayın
LicensePath ve otomatik aramanın AppContext.BaseDirectory denetimi, .lic dosyasının derlenmiş uygulamanın yanına bulunmasını ister — sadece kaynak wwwroot klasörünüzde değil. SDK'nın kendi test uygulaması, her derlemede bu MSBuild hedefiyle dosyayı kopyalar:
<Target Name="CopyLicensesToOutput" AfterTargets="Build">
<ItemGroup>
<DoconutLicenseFiles Include="$(MSBuildProjectDirectory)\wwwroot\*.lic" />
</ItemGroup>
<Copy SourceFiles="@(DoconutLicenseFiles)" DestinationFolder="$(OutDir)" SkipUnchangedFiles="true" />
</Target>
.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 istisna atmaz. 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 geçerlilik süresi dışındaki bir derleme, OpenDocumentAsync'in LicenseException atmasına ve License.RejectionMessage içermesine neden olur. Reddetme mesajı olmayan takvim süresi dolmuş bir lisans, filigranlı modda devam eder.
Eklentiler Yeteneğe İhtiyaç Duyar
Eşleşen 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 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 doğrudan çözümü 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 Geçici/Demo (NFR) lisansı kurun. Geçici kayıtların süresi dolduktan sonra da var olmaları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ğrulayın
IDoconutLicenseService'i, SDK'nın kullandığı aynı gerçek kaynak olarak, kimliği doğrulanmış bir tanı uç noktası sunmak veya özellik bayraklarını yönetmek için kullanın. 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'i çözün; çıktı dizinini ve işlem çalışma dizinini doğrulayın |
AddDoconut() bir eklenti için istisna atıyor | Lisans o eklenti yeteneğini vermiyor | IsCapabilityGranted(...)'i kontrol edin ve satın almadığınız kayıtları kaldırın |
| Yapılandırılmış göreceli yol yerel olarak çalışıyor ancak IIS/konteynerde çalışmıyor | İşlem çalışma dizini değişti | AppContext.BaseDirectory veya mutlak bir yol kullanın |
Değiştirilen .lic dosyası etkisiz | Tekil lisans hizmeti zaten oluşturulmuş | Uygulamayı yeniden başlatın |
OpenDocumentAsync LicenseException fırlatıyor | İ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 seviyeleri 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?