راهاندازی مجوز
محل جستجوی Doconut برای فایل مجوز شما در IIS
بدون مجوز، Doconut همچنان اسناد را رندر میکند — هر صفحه فقط یک واترمارک ارزیابی دارد. این صفحه چهار روش برای ارائه یک مجوز در Global.asax، جایی که Doconut هنگام عدم ارائه مجوز جستجو میکند، و آنچه که هنگام عدم وجود مجوز یک افزونه رخ میدهد را پوشش میدهد.
چهار روش برای ارائه یک مجوز
در DoconutOptions سه منبع صریح وجود دارد — مسیر فایل، یک جریان، یا محتوای خام — بهعلاوه کشف خودکار وقتی هیچکدام تنظیم نشده باشد. همه آنها یکبار در DoconutHost.Initialize خوانده میشوند. وقتی بیش از یک منبع تنظیم شده باشد، اولویت دقیقاً به این صورت است:
LicenseStream بر LicenseContent بر LicensePath بر کشف خودکار برتری دارد.
بر اساس مسیر
به LicensePath یک مسیر کامل بدهید. یک مسیر نسبی نسبت به پوشه جاری فرآیند حل میشود و تحت IIS این پوشه، پوشهی فرآیند کارگر است، نه سایت شما. HostingEnvironment.MapPath یک مسیر نسبی به سایت را به مسیر کامل تبدیل میکند:
Doconut.DoconutHost.Initialize(options =>
{
options.LicensePath = HostingEnvironment.MapPath("~/wwwroot/Doconut.Viewer.lic");
});اگر فایل وجود نداشته باشد، Doconut خطا نمیاندازد و به کشف خودکار باز نمیگردد: هیچ مجوزی بارگذاری نمیشود و نمایشگر واترمارک میگذارد. فایلهای مجوز مربوط به هر افزونه در همان پوشه (Doconut.Viewer.<Capability>.lic) همراه با آن خوانده میشوند، بنابراین LicensePath و AddPlugin<...>() با هم کار میکنند وقتی مجوزهای افزونه در کنار مجوز پایه قرار دارند.
بر اساس جریان
LicenseStream یکبار در زمان راهاندازی خوانده میشود — مفید زمانی که مجوز از یک منبع جاسازیشده یا یک مخزن محرمانه میآید نه از یک فایل روی دیسک.
// اولویت: LicenseStream > LicenseContent > LicensePath > auto-search.
Doconut.DoconutHost.Initialize(options =>
{
options.LicenseStream = licenseStream;
});بر اساس محتوا
LicenseContent متن خود مجوز را میگیرد — از یک متغیر محیطی، پایگاه داده یا مخزن محرمانه — بنابراین نیازی به استقرار فایل مجوز همراه با سایت نیست.
// XML مجوز از یک پایگاه داده، یک متغیر محیطی یا یک مخزن رمز -
// فایلی روی دیسک وجود ندارد. فقط توسط LicenseStream پیشی گرفته میشود.
Doconut.DoconutHost.Initialize(options =>
{
options.LicenseContent = Environment.GetEnvironmentVariable("DOCONUT_LICENSE") ?? "";
});کشف خودکار
هیچیک از سه گزینه را تنظیم نکنید، و Doconut خود بهدنبال مجوز میگردد:
// هیچچیزی پیکربندی نشود، و Doconut برای خود مجوز جستجو میکند، به این ترتیب:
// 1. {CurrentDirectory}\wwwroot
// 2. {AppContext.BaseDirectory}\wwwroot (در زیر IIS: پوشه ریشه سایت)
// به دنبال Doconut.lic ابتدا میگردد، سپس Doconut.Viewer.lic، بهعلاوه هر افزونهای
// Doconut.Viewer.<Capability>.lic فایلها در کنار آن.
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 موفق میشود، سایت شروع میشود و نمایشگر اجرا میشود، اما هر صفحه یک واترمارک ارزیابی دارد و هیچ قابلیت اختیاری اعطا نمیشود.
یک فایل مجوز که پیدا میشود اما رد میشود متفاوت است. امضای نامعتبر، دستکاری، یا ساختی خارج از بازه نسخه مجوز باعث میشود 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 خالی برمیگرداند — صفحه خطا نیست، ردگیری پشته نیست، چیزی در لاگ IIS نیست. استثنا فقط در لاگ رویداد ویندوز (لاگ برنامه، منبع ASP.NET) ثبت میشود. اگر کل سایت بلافاصله پس از افزودن یک خط AddPlugin متوقف شد، قبل از کد فایلهای مجوز را در wwwroot بررسی کنید: Doconut.Viewer.<Capability>.lic افزونه باید کنار Doconut.Viewer.lic قرار گیرد، و بدون مجوز پایه فایلهای افزونه اصلاً خوانده نمیشوند.
تأیید مجوز بارگذاریشده
IDoconutLicenseService همان منبع حقیقتی است که SDK استفاده میکند. آن را از DoconutHost.Services حل کنید تا یک نقطه انتهایی تشخیص معتبر را افشا کنید یا پرچمهای ویژگی را فعال کنید — هرگز محتوای مجوز را برنگردانید:
// 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 خوانده میشود. پس از جایگزینی فایل مجوز، استخر برنامه را بازچرخانی کنید (یا Web.config را تغییر دهید) تا Application_Start دوباره اجرا شود.
عیبیابی
| علائم | علت محتمل | بررسی |
|---|---|---|
| نمایشگر کار میکند اما هر صفحه واترمارک دارد | هیچ مجوزی یافت نشد | آیا .lic در <site root>\wwwroot وجود دارد؟ نقطه انتهایی وضعیت بالا را فراخوانی کنید |
هر درخواست یک 500 خالی برمیگرداند بلافاصله پس از افزودن یک افزونه | یک افزونه ثبتشده مجوزی برای آن ندارد | لاگ رویداد ویندوز، منبع ASP.NET؛ .lic افزونه کنار Doconut.Viewer.lic |
LicensePath روی ماشین شما کار میکند اما روی سرور نه | مسیر نسبی که نسبت به پوشه فرآیند کارگر حل میشود | آن را با HostingEnvironment.MapPath("~/wwwroot/...") بسازید |
فایل .lic جایگزین شده تأثیری ندارد | مجوز هنگام شروع برنامه خوانده شد | استخر برنامه را بازچرخانی کنید |
OpenDocumentAsync پرتاب میکند LicenseException | مجوز پیدا شد اما رد شد | پیام استثنا را بخوانید؛ آن را به مشتریان غیرقابل اعتماد نشان ندهید |
گامهای بعدی
آیا این صفحه مفید بود؟