การตั้งค่าใบอนุญาต

ตำแหน่งที่ Doconut มองหาไฟล์ใบอนุญาตของคุณภายใต้ IIS

หากไม่มีใบอนุญาต Doconut ยังสามารถแสดงเอกสารได้ — ทุกหน้าจะมีลายน้ำการประเมินผล หน้านี้อธิบายสี่วิธีในการจัดหาใบอนุญาตใน Global.asax ที่ Doconut มองหาเมื่อคุณไม่ได้จัดหาใด ๆ และสิ่งที่เกิดขึ้นเมื่อใบอนุญาตของปลั๊กอินหายไป

สี่วิธีในการจัดหาใบอนุญาต

มีแหล่งข้อมูลที่ชัดเจนสามแหล่งบน DoconutOptions — เส้นทางไฟล์, สตรีม, หรือเนื้อหาแบบดิบ — พร้อมการค้นหาอัตโนมัติเมื่อไม่มีการตั้งค่าใด ๆ ทั้งหมดจะถูกอ่านครั้งเดียวใน DoconutHost.Initialize เมื่อมีการตั้งค่ามากกว่าหนึ่งค่า ลำดับความสำคัญเป็นดังนี้:

LicenseStream แซง LicenseContent แซง LicensePath แซงการค้นหาอัตโนมัติ.

โดยใช้เส้นทาง

กำหนด LicensePath ให้เป็นเส้นทางเต็ม เส้นทางสัมพันธ์จะถูกแก้ไขโดยอ้างอิงจากไดเรกทอรีปัจจุบันของกระบวนการ และภายใต้ IIS นั้นคือโฟลเดอร์ของ worker process ไม่ใช่ไซต์ของคุณ HostingEnvironment.MapPath จะเปลี่ยนเส้นทางสัมพันธ์ของไซต์ให้เป็นเส้นทางเต็ม:

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

หากไฟล์ไม่อยู่ Doconut จะไม่ขว้างข้อยกเว้นและ ไม่ กลับไปใช้การค้นหาอัตโนมัติ: จะไม่มีการโหลดใบอนุญาตและ viewer จะใส่ลายน้ำ ไฟล์ใบอนุญาตของแต่ละปลั๊กอินในโฟลเดอร์เดียวกัน (Doconut.Viewer.<Capability>.lic) จะถูกอ่านพร้อมกับมัน ดังนั้น LicensePath และ AddPlugin<...>() ทำงานร่วมกันเมื่อใบอนุญาตของปลั๊กอินอยู่ข้าง ๆ ใบอนุญาตหลัก

โดยใช้สตรีม

LicenseStream จะถูกอ่านครั้งเดียวขณะเริ่มต้น — มีประโยชน์เมื่อใบอนุญาตมาจากทรัพยากรฝังตัวหรือที่เก็บความลับแทนไฟล์บนดิสก์

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

โดยใช้เนื้อหา

LicenseContent รับข้อความใบอนุญาตโดยตรง — จากตัวแปรสภาพแวดล้อม, ฐานข้อมูล, หรือที่เก็บความลับ — ดังนั้นจึงไม่จำเป็นต้องมีไฟล์ใบอนุญาตในไซต์

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") ?? "";
});

การค้นหาอัตโนมัติ

ไม่ตั้งค่าใด ๆ ทั้งสาม แล้ว Doconut จะค้นหาใบอนุญาตด้วยตนเอง:

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();

สองโฟลเดอร์ตามลำดับและไฟล์ที่ค้นหา:

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

ภายใต้ IIS และ IIS Express AppContext.BaseDirectory คือ โฟลเดอร์รากของไซต์ — โฟลเดอร์ที่มี Web.config — ไม่ใช่โฟลเดอร์ bin ของมัน ดังนั้นใบอนุญาตต้องอยู่ใน wwwroot ภายใต้รากของไซต์:

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

ในโครงการ ให้เก็บ wwwroot\*.lic ข้าง Web.config และทำการปรับใช้โฟลเดอร์พร้อมกับไซต์ ไม่ต้องมีขั้นตอนการสร้างเพื่อคัดลอกไฟล์ใด ๆ ไฟล์ .lic ที่อยู่ที่อื่น — ไม่ว่าจะใน bin\, ข้าง Web.config, หรือในโฟลเดอร์ย่อยของ wwwroot — จะไม่ถูกอ่าน

อย่าเก็บไฟล์ .lic ไว้ในระบบควบคุมเวอร์ชัน ปรับใช้ไฟล์เหล่านี้ข้างไซต์, หรือจัดหาใบอนุญาตผ่าน LicenseContent หรือ LicenseStream จากที่เก็บความลับของคุณ

สิ่งที่เกิดขึ้นเมื่อไม่มีใบอนุญาต

ใบอนุญาตที่หายไปจะไม่ขว้างข้อยกเว้น DoconutHost.Initialize จะสำเร็จ, เว็บไซต์จะเริ่มทำงาน, และ viewer จะทำงาน, แต่ทุกหน้าจะมีลายน้ำการประเมินผลและไม่มีความสามารถเสริมใด ๆ ถูกให้

ไฟล์ใบอนุญาตที่พบแต่ถูกปฏิเสธเป็นกรณีอื่น ลายเซ็นไม่ถูกต้อง, มีการดัดแปลง, หรือสร้างนอกช่วงเวอร์ชันของใบอนุญาตจะทำให้ OpenDocumentAsync ขว้าง LicenseException พร้อมเหตุผล

ปลั๊กอินต้องการใบอนุญาตของตนเมื่อตอนเริ่มต้น

การลงทะเบียนปลั๊กอินที่ความสามารถของมันไม่ได้รับการให้สิทธิ์จากใบอนุญาตใด ๆ จะทำให้แอปพลิเคชันหยุดทำงานเมื่อตอนเริ่มต้น DoconutHost.Initialize จะขว้างข้อผิดพลาดใน 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.

ภายใต้ System.Web คุณจะไม่เห็นข้อความนั้นในเบราว์เซอร์ ทุกคำขอไปยังไซต์จะตอบด้วย 500 ว่างเปล่า — ไม่มีหน้าแสดงข้อผิดพลาด, ไม่มี stack trace, ไม่มีอะไรในบันทึก IIS ข้อยกเว้นจะถูกบันทึกเฉพาะใน Windows event log (Application log, source ASP.NET) หากไซต์ทั้งหมดหยุดตอบสนองทันทีหลังจากคุณเพิ่มบรรทัด AddPlugin ให้ตรวจสอบไฟล์ใบอนุญาตใน wwwroot ก่อนโค้ด: ปลั๊กอินต้องมีไฟล์ Doconut.Viewer.<Capability>.lic อยู่ข้าง Doconut.Viewer.lic และหากไม่มีใบอนุญาตหลักไฟล์ปลั๊กอินจะไม่ถูกอ่านเลย

ตรวจสอบใบอนุญาตที่โหลด

IDoconutLicenseService เป็นแหล่งความจริงเดียวที่ SDK ใช้ ดึงบริการนี้จาก DoconutHost.Services เพื่อเปิดเผย endpoint การวินิจฉัยที่ได้รับการตรวจสอบหรือใช้เป็นตัวกำหนดฟีเจอร์ — อย่าคืนค่าเนื้อหาใบอนุญาต:

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);
}

ใบอนุญาตจะถูกอ่านครั้งเดียวใน DoconutHost.Initialize หลังจากเปลี่ยนไฟล์ใบอนุญาต ให้รีไซเคิล application pool (หรือแก้ไข Web.config) เพื่อให้ Application_Start ทำงานใหม่

การแก้ไขปัญหา

อาการสาเหตุที่เป็นไปได้ตรวจสอบ
Viewer ทำงานแต่ทุกหน้าแสดงลายน้ำไม่พบใบอนุญาตไฟล์ .lic อยู่ใน <site root>\wwwroot หรือไม่? เรียก endpoint สถานะด้านบน
ทุกคำขอตอบด้วย 500 ว่างเปล่าทันทีหลังจากเพิ่มปลั๊กอินปลั๊กอินที่ลงทะเบียนไม่มีใบอนุญาตที่ให้สิทธิ์บันทึกเหตุการณ์ Windows, source ASP.NET; ไฟล์ .lic ของปลั๊กอินอยู่ข้าง Doconut.Viewer.lic
LicensePath ทำงานบนเครื่องของคุณแต่ไม่ทำงานบนเซิร์ฟเวอร์เส้นทางสัมพันธ์ที่ถูกแก้ไขโดยอ้างอิงโฟลเดอร์ของ worker processสร้างด้วย HostingEnvironment.MapPath("~/wwwroot/...")
ไฟล์ .lic ที่แทนที่ไม่มีผลใบอนุญาตถูกอ่านเมื่อแอปพลิเคชันเริ่มต้นรีไซเคิล application pool
OpenDocumentAsync ขว้าง LicenseExceptionพบใบอนุญาตแต่ถูกปฏิเสธอ่านข้อความข้อยกเว้น; อย่าแสดงให้กับลูกค้าที่ไม่เชื่อถือ

ขั้นตอนต่อไป

หน้านี้เป็นประโยชน์หรือไม่?