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 yol ayarlandığında kesin önceliği açıklar.

Lisans bir kez, AddDoconut() sırasında yüklenir. Bu, önceki .NET Standard kitaplığından bir değişikliktir; o zaman lisans bir Viewer örneğine verilirdi ya da statik Viewer.DoconutLicense(...) / Viewer.SetLicensePlugin(...) çağrılarıyla ayarlanırdı. Bu yöntemler bu sürümde bir başlangıç mekanizması değildir — göç rehberi.

Lisansı sağlamanın dört yolu

Dört yol vardır: DoconutOptions üzerindeki üç açık kaynak — bir akış, ham içerik veya bir dosya yolu — ve hiçbiri ayarlı olmadığında otomatik keşif. Birden fazla yol ayarlandığında, öncelik kesin olarak şu şekildedir:

LicenseStream, LicenseContent, LicensePath ve otomatik aramayı geçer.

Yol ile

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 — proje klasörünüz değil ve Program.cs'ın bulunduğu klasör de değil. Yol çözülemezse, Doconut bir hata atmaz ve değil 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ı olmadığında çalışır. Aynı klasördeki (Doconut.Viewer.<Capability>.lic) eklenti başına lisans dosyaları da bununla 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.

csharp
builder.Services.AddDoconut(options =>
{
    options.LicensePath = Path.Combine(AppContext.BaseDirectory, "wwwroot", "Doconut.Viewer.lic");
});

Akış ile

LicenseStream, başlangıçta bir kez okunur — lisansın bir dosya yerine gizli bir depodan gelmesi durumunda kullanışlıdır.

csharp
// Öncelik: LicenseStream > LicenseContent > LicensePath > otomatik arama.
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:

csharp
// Veritabanı, ortam değişkeni veya gizli yöneticiden lisans XML'i —
// 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:

csharp
// Hiçbir şey yapılandırmayın, Doconut lisansı kendisi arar, yalnızca bu iki klasörde:
//   1. {CurrentDirectory}/wwwroot
//   2. {AppContext.BaseDirectory}/wwwroot   (wwwroot, derleme çıktı klasörünün içinde)
// Önce Doconut.lic, ardından Doconut.Viewer.lic, ayrıca yetenek bazlı diğerlerini arar.
// Doconut.Viewer.<Capability>.lic dosyaları yanına.
builder.Services.AddDoconut();

Sorgulama klasörleri sırasıyla ve her birinde aranan dosya adları:

text
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-capability license, alongside the base license

wwwroot klasörünün dışındaki hiçbir şey okunmaz: çıktı klasörünün içinde bir .lic veya wwwroot/lib içindeki bir şey yok sayılır.

Daha önce Viewer yapıcısına bir List<string> lisans yolu (her yetenek için bir) gönderdiyseniz — bu yardımcı dosyaları Doconut.Viewer.lic'ın yanına koyun ve otomatik keşfin onları almasını sağlayın. DoconutOptions üzerinde bir yol listesi seçeneği yoktur.

Lisansı çıktı klasörünüze kopyalayın

İşlem proje klasöründen çalışmadığında — yayınlanmış bir uygulama, IIS, bir konteyner, bir test çalıştırıcısı — ilk deneme başarısız olur ve ikinci deneme, {AppContext.BaseDirectory}/wwwroot, dosyayı bulmak zorundadır. SDK'nın kendi test uygulaması, her derlemede bu MSBuild hedefiyle lisansları oraya kopyalar:

xml
<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.

.lic dosyalarını kaynak kontrolünden uzak tutun — uygulamanın yanına dağıtın veya lisansı gizli mağazanızdan LicenseContent veya LicenseStream aracılığıyla enjekte edin.

Lisans olmadan ne olur

Eksik bir lisans hata vermez. 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 ile License.RejectionMessage atmasına neden olur. Reddetme mesajı olmayan takvim süresi dolmuş bir lisans, filigranlı modda devam eder.

Eklentilerin yeteneklere ihtiyacı var

İ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 atar, bu yüzden uygulama başlatılamaz. Örneğin, Converter sağlayan bir lisans olmadan Converter eklentisini kaydetmek:

text
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 sağlayan bir ücretli lisans ya da aktif bir Geçici/Demo (NFR) lisansı kurun. Geçici kayıtların son tarihlerini geçmelerine izin verilir, böylece önceden yapılandırılmış bir uygulama yeniden başlatma sırasında çökmek yerine çalışma zamanında gerileyebilir; süresi dolduğunda ise yetenekleri hâlâ iptal edilir.

Yüklenen lisansı doğrulayın

IDoconutLicenseService'i, SDK tarafından kullanılan aynı gerçek kaynağı, 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.

csharp
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

BelirtiMuhtemel nedenKontrol
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 hata atarLisans o eklenti yeteneğini sağlamazIsCapabilityGranted(...)'i 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ştiAppContext.BaseDirectory'i veya mutlak bir yolu kullanın
Değiştirilen .lic dosyası etkisizTekil lisans hizmeti zaten oluşturulmuştuUygulamayı yeniden başlatın
OpenDocumentAsync LicenseException atarİmza, domain, sürüm penceresi, kara liste veya eklenti çalışma zamanı geçidi lisansı reddettiİstisna/red mesajını güvensiz istemcilere göstermeden okuyun
Yeteneğe göre lisans önce çalışıyordu ancak artık çalışmıyorEski kod, Viewer yapıcısına açık lisans yolları gönderdiEşlik eden .lic dosyalarını Doconut.Viewer.lic yanına taşıyın ve otomatik keşfin onları yüklemesine izin verin

Sonraki adımlar

  • Lisanslama — yetenekler, lisans seviyeleri ve çalışma zamanında nelerin yüklendiğinin doğrulanması.
  • Sorun Giderme — filigranlar, reddedilen lisanslar ve yetenek hataları.

Bu sayfa yardımcı oldu mu?