Pengaturan Lisensi

Di mana Doconut mencari file lisensi Anda di bawah IIS

Tanpa lisensi, Doconut tetap merender dokumen — setiap halaman hanya menampilkan watermark evaluasi. Halaman ini menjelaskan empat cara menyediakan lisensi di Global.asax, tempat Doconut mencari ketika Anda tidak menyediakan apa pun, dan apa yang terjadi ketika lisensi plugin tidak ada.

Empat cara menyediakan lisensi

Ada tiga sumber eksplisit pada DoconutOptions — jalur file, stream, atau konten mentah — serta penemuan otomatis ketika tidak ada yang diatur. Semua dibaca sekali, di DoconutHost.Initialize. Ketika lebih dari satu diatur, urutan prioritasnya tepat:

LicenseStream mengalahkan LicenseContent mengalahkan LicensePath mengalahkan penemuan otomatis.

Dengan path

Berikan LicensePath sebuah path lengkap. Path relatif diselesaikan terhadap direktori kerja proses saat ini, dan di bawah IIS itu adalah folder proses pekerja itu sendiri, bukan situs Anda. HostingEnvironment.MapPath mengubah path relatif situs menjadi path lengkap:

csharp
Doconut.DoconutHost.Initialize(options =>
{
    options.LicensePath = HostingEnvironment.MapPath("~/wwwroot/Doconut.Viewer.lic");
});

Jika file tidak ada, Doconut tidak melempar pengecualian dan tidak kembali ke penemuan otomatis: tidak ada lisensi yang dimuat, dan penampil menampilkan watermark. File lisensi per-plugin di folder yang sama (Doconut.Viewer.<Capability>.lic) dibaca bersamanya, sehingga LicensePath dan AddPlugin<...>() bekerja bersama ketika lisensi plugin berada di samping lisensi dasar.

Dengan stream

LicenseStream dibaca sekali, saat startup — berguna ketika lisensi berasal dari sumber daya tersemat atau penyimpanan rahasia daripada file di disk.

csharp
// Precedence: LicenseStream > LicenseContent > LicensePath > auto-search.
Doconut.DoconutHost.Initialize(options =>
{
    options.LicenseStream = licenseStream;
});

Dengan konten

LicenseContent mengambil teks lisensi itu sendiri — dari variabel lingkungan, basis data, atau penyimpanan rahasia — sehingga tidak perlu menyebarkan file lisensi bersama situs.

csharp
// License XML from a database, an environment variable or a secret store -
// no file on disk. Beaten only by LicenseStream.
Doconut.DoconutHost.Initialize(options =>
{
    options.LicenseContent = Environment.GetEnvironmentVariable("DOCONUT_LICENSE") ?? "";
});

Penemuan otomatis

Jangan atur salah satu dari tiga, dan Doconut mencari lisensi sendiri:

csharp
// Configure nothing, and Doconut searches for the license itself, in this order:
//   1. {CurrentDirectory}\wwwroot
//   2. {AppContext.BaseDirectory}\wwwroot   (under IIS: the site's root folder)
// It looks for Doconut.lic first, then Doconut.Viewer.lic, plus any per-plugin
// Doconut.Viewer.<Capability>.lic files alongside it.
Doconut.DoconutHost.Initialize();

Dua folder, dalam urutan, dan file yang dicari:

text
1. {CurrentDirectory}\wwwroot
2. {AppContext.BaseDirectory}\wwwroot

In each folder:
  Doconut.lic                        — if found, this is the only file read
  Doconut.Viewer.lic                 — base viewer license
  Doconut.Viewer.<Capability>.lic    — per-plugin licenses, read only next to Doconut.Viewer.lic

Di bawah IIS dan IIS Express, AppContext.BaseDirectory adalah folder root situs — folder yang berisi Web.config — bukan folder bin-nya. Jadi lisensi harus berada di wwwroot di bawah root situs:

text
MySite\
  Web.config
  Global.asax
  bin\
  wwwroot\
    Doconut.Viewer.lic
    Doconut.Viewer.Converter.lic

Dalam proyek, letakkan wwwroot\*.lic di samping Web.config dan sebarkan folder bersama situs. Tidak ada langkah build yang harus menyalinnya ke mana pun. .lic di tempat lain — di bin\, di samping Web.config, atau di subfolder wwwroot — tidak pernah dibaca.

Simpan file .lic di luar kontrol sumber. Sebarkan bersama situs, atau sediakan lisensi melalui LicenseContent atau LicenseStream dari penyimpanan rahasia Anda.

Apa yang terjadi tanpa lisensi

Lisensi yang hilang tidak menyebabkan pengecualian. DoconutHost.Initialize berhasil, situs mulai, dan penampil berjalan, tetapi setiap halaman menampilkan watermark evaluasi dan tidak ada kemampuan opsional yang diberikan.

File lisensi yang ditemukan tetapi ditolak berbeda. Tanda tangan tidak valid, manipulasi, atau build di luar jendela versi lisensi membuat OpenDocumentAsync melempar LicenseException dengan alasan.

Plugin memerlukan lisensinya saat startup

Mendaftarkan plugin yang kemampuannya tidak diberikan lisensi menghentikan aplikasi saat startup. DoconutHost.Initialize melempar di Application_Start:

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.

Di bawah System.Web, Anda tidak melihat pesan itu di peramban. Setiap permintaan ke situs menjawab 500 kosong — tidak ada halaman error, tidak ada jejak stack, tidak ada apa pun di log IIS. Pengecualian hanya dicatat di log peristiwa Windows (log Aplikasi, sumber ASP.NET). Jika seluruh situs berhenti merespons tepat setelah Anda menambahkan baris AddPlugin, periksa file lisensi di wwwroot sebelum kode: Doconut.Viewer.<Capability>.lic plugin harus berada di samping Doconut.Viewer.lic, dan tanpa lisensi dasar file plugin tidak dibaca sama sekali.

Verifikasi lisensi yang dimuat

IDoconutLicenseService adalah sumber kebenaran yang sama yang digunakan SDK. Dapatkan dari DoconutHost.Services untuk mengekspos endpoint diagnostik terautentikasi atau mengendalikan flag fitur — jangan pernah mengembalikan konten lisensi:

csharp
// GET /License/Status
public ActionResult Status()
{
    var license = Doconut.DoconutHost.Services.GetRequiredService<IDoconutLicenseService>();

    return Json(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
    }, JsonRequestBehavior.AllowGet);
}

Lisensi dibaca sekali, di DoconutHost.Initialize. Setelah mengganti file lisensi, daur ulang application pool (atau sentuh Web.config) sehingga Application_Start dijalankan kembali.

Pemecahan Masalah

GejalaPenyebab kemungkinanPeriksa
Penampil berfungsi tetapi setiap halaman berwatermarkTidak ada lisensi yang ditemukanApakah .lic berada di <site root>\wwwroot? Panggil endpoint status di atas
Setiap permintaan menjawab 500 kosong tepat setelah menambahkan pluginPlugin yang terdaftar tidak memiliki lisensi yang memberikannyaLog peristiwa Windows, sumber ASP.NET; .lic plugin berada di samping Doconut.Viewer.lic
LicensePath berfungsi di mesin Anda tetapi tidak di serverPath relatif yang diselesaikan terhadap folder proses pekerjaBangun dengan HostingEnvironment.MapPath("~/wwwroot/...")
File .lic yang diganti tidak berpengaruhLisensi dibaca saat aplikasi dimulaiDaur ulang application pool
OpenDocumentAsync melempar LicenseExceptionLisensi ditemukan tetapi ditolakBaca pesan pengecualian; jangan tunjukkan ke klien yang tidak terpercaya

Langkah Selanjutnya

  • Lisensi — kemampuan, dan cara memeriksanya saat waktu jalan.
  • Pemecahan Masalah — watermark, kegagalan startup, dan gejala lainnya.

Apakah halaman ini membantu?