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.

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

csharp
// 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:

csharp
// 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:

csharp
// 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ı:

text
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.lic

Lisansı Çı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:

xml
<Target Name="CopyLicensesToOutput" AfterTargets="Build">
  <ItemGroup>
    <DoconutLicenseFiles Include="$(MSBuildProjectDirectory)\wwwroot\*.lic" />
  </ItemGroup>
  <Copy SourceFiles="@(DoconutLicenseFiles)" DestinationFolder="$(OutDir)" SkipUnchangedFiles="true" />
</Target>

.lic dosyalarını kaynak kontrolünden uzak tutun — uygulamanın yanına dağıtın, ya da lisansı gizli deponuzdan LicenseContent veya LicenseStream aracı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:

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

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

SemptomMuhtemel 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 istisna atıyorLisans o eklenti yeteneğini vermiyorIsCapabilityGranted(...)'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ştiAppContext.BaseDirectory veya mutlak bir yol kullanın
Değiştirilen .lic dosyası etkisizTekil 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?