การตั้งค่าใบอนุญาต
ตำแหน่งที่ Doconut มองหาไฟล์ใบอนุญาตของคุณภายใต้ IIS
หากไม่มีใบอนุญาต Doconut ยังสามารถแสดงเอกสารได้ — ทุกหน้าจะมีลายน้ำการประเมินผล หน้านี้อธิบายสี่วิธีในการจัดหาใบอนุญาตใน Global.asax ที่ Doconut มองหาเมื่อคุณไม่ได้จัดหาใด ๆ และสิ่งที่เกิดขึ้นเมื่อใบอนุญาตของปลั๊กอินหายไป
สี่วิธีในการจัดหาใบอนุญาต
มีแหล่งข้อมูลที่ชัดเจนสามแหล่งบน DoconutOptions — เส้นทางไฟล์, สตรีม, หรือเนื้อหาแบบดิบ — พร้อมการค้นหาอัตโนมัติเมื่อไม่มีการตั้งค่าใด ๆ ทั้งหมดจะถูกอ่านครั้งเดียวใน DoconutHost.Initialize เมื่อมีการตั้งค่ามากกว่าหนึ่งค่า ลำดับความสำคัญเป็นดังนี้:
LicenseStream แซง LicenseContent แซง LicensePath แซงการค้นหาอัตโนมัติ.
โดยใช้เส้นทาง
กำหนด LicensePath ให้เป็นเส้นทางเต็ม เส้นทางสัมพันธ์จะถูกแก้ไขโดยอ้างอิงจากไดเรกทอรีปัจจุบันของกระบวนการ และภายใต้ IIS นั้นคือโฟลเดอร์ของ worker process ไม่ใช่ไซต์ของคุณ HostingEnvironment.MapPath จะเปลี่ยนเส้นทางสัมพันธ์ของไซต์ให้เป็นเส้นทางเต็ม:
Doconut.DoconutHost.Initialize(options =>
{
options.LicensePath = HostingEnvironment.MapPath("~/wwwroot/Doconut.Viewer.lic");
});หากไฟล์ไม่อยู่ Doconut จะไม่ขว้างข้อยกเว้นและ ไม่ กลับไปใช้การค้นหาอัตโนมัติ: จะไม่มีการโหลดใบอนุญาตและ viewer จะใส่ลายน้ำ ไฟล์ใบอนุญาตของแต่ละปลั๊กอินในโฟลเดอร์เดียวกัน (Doconut.Viewer.<Capability>.lic) จะถูกอ่านพร้อมกับมัน ดังนั้น LicensePath และ AddPlugin<...>() ทำงานร่วมกันเมื่อใบอนุญาตของปลั๊กอินอยู่ข้าง ๆ ใบอนุญาตหลัก
โดยใช้สตรีม
LicenseStream จะถูกอ่านครั้งเดียวขณะเริ่มต้น — มีประโยชน์เมื่อใบอนุญาตมาจากทรัพยากรฝังตัวหรือที่เก็บความลับแทนไฟล์บนดิสก์
// Precedence: LicenseStream > LicenseContent > LicensePath > auto-search.
Doconut.DoconutHost.Initialize(options =>
{
options.LicenseStream = licenseStream;
});โดยใช้เนื้อหา
LicenseContent รับข้อความใบอนุญาตโดยตรง — จากตัวแปรสภาพแวดล้อม, ฐานข้อมูล, หรือที่เก็บความลับ — ดังนั้นจึงไม่จำเป็นต้องมีไฟล์ใบอนุญาตในไซต์
// 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 จะค้นหาใบอนุญาตด้วยตนเอง:
// 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();สองโฟลเดอร์ตามลำดับและไฟล์ที่ค้นหา:
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 ภายใต้รากของไซต์:
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:
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 การวินิจฉัยที่ได้รับการตรวจสอบหรือใช้เป็นตัวกำหนดฟีเจอร์ — อย่าคืนค่าเนื้อหาใบอนุญาต:
// 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 | พบใบอนุญาตแต่ถูกปฏิเสธ | อ่านข้อความข้อยกเว้น; อย่าแสดงให้กับลูกค้าที่ไม่เชื่อถือ |
ขั้นตอนต่อไป
- การให้สิทธิ์ — ความสามารถต่าง ๆ และวิธีตรวจสอบในเวลารัน
- การแก้ไขปัญหา — ลายน้ำ, ความล้มเหลวตอนเริ่มต้น, และอาการอื่น ๆ
หน้านี้เป็นประโยชน์หรือไม่?