راه‌اندازی مجوز

محل جستجوی Doconut برای فایل مجوز شما در IIS

بدون مجوز، Doconut همچنان اسناد را رندر می‌کند — هر صفحه فقط یک واترمارک ارزیابی دارد. این صفحه چهار روش برای ارائه یک مجوز در Global.asax، جایی که Doconut هنگام عدم ارائه مجوز جستجو می‌کند، و آنچه که هنگام عدم وجود مجوز یک افزونه رخ می‌دهد را پوشش می‌دهد.

چهار روش برای ارائه یک مجوز

در DoconutOptions سه منبع صریح وجود دارد — مسیر فایل، یک جریان، یا محتوای خام — به‌علاوه کشف خودکار وقتی هیچ‌کدام تنظیم نشده باشد. همه آن‌ها یک‌بار در DoconutHost.Initialize خوانده می‌شوند. وقتی بیش از یک منبع تنظیم شده باشد، اولویت دقیقاً به این صورت است:

LicenseStream بر LicenseContent بر LicensePath بر کشف خودکار برتری دارد.

بر اساس مسیر

به LicensePath یک مسیر کامل بدهید. یک مسیر نسبی نسبت به پوشه جاری فرآیند حل می‌شود و تحت IIS این پوشه، پوشه‌ی فرآیند کارگر است، نه سایت شما. HostingEnvironment.MapPath یک مسیر نسبی به سایت را به مسیر کامل تبدیل می‌کند:

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

اگر فایل وجود نداشته باشد، Doconut خطا نمی‌اندازد و به کشف خودکار باز نمی‌گردد: هیچ مجوزی بارگذاری نمی‌شود و نمایشگر واترمارک می‌گذارد. فایل‌های مجوز مربوط به هر افزونه در همان پوشه (Doconut.Viewer.<Capability>.lic) همراه با آن خوانده می‌شوند، بنابراین LicensePath و AddPlugin<...>() با هم کار می‌کنند وقتی مجوزهای افزونه در کنار مجوز پایه قرار دارند.

بر اساس جریان

LicenseStream یک‌بار در زمان راه‌اندازی خوانده می‌شود — مفید زمانی که مجوز از یک منبع جاسازی‌شده یا یک مخزن محرمانه می‌آید نه از یک فایل روی دیسک.

csharp
// اولویت: LicenseStream > LicenseContent > LicensePath > auto-search.
Doconut.DoconutHost.Initialize(options =>
{
    options.LicenseStream = licenseStream;
});

بر اساس محتوا

LicenseContent متن خود مجوز را می‌گیرد — از یک متغیر محیطی، پایگاه داده یا مخزن محرمانه — بنابراین نیازی به استقرار فایل مجوز همراه با سایت نیست.

csharp
// XML مجوز از یک پایگاه داده، یک متغیر محیطی یا یک مخزن رمز -
// فایلی روی دیسک وجود ندارد. فقط توسط LicenseStream پیشی گرفته می‌شود.
Doconut.DoconutHost.Initialize(options =>
{
    options.LicenseContent = Environment.GetEnvironmentVariable("DOCONUT_LICENSE") ?? "";
});

کشف خودکار

هیچ‌یک از سه گزینه را تنظیم نکنید، و Doconut خود به‌دنبال مجوز می‌گردد:

csharp
// هیچ‌چیزی پیکربندی نشود، و Doconut برای خود مجوز جستجو می‌کند، به این ترتیب:
//   1. {CurrentDirectory}\wwwroot
//   2. {AppContext.BaseDirectory}\wwwroot   (در زیر IIS: پوشه ریشه سایت)
// به دنبال Doconut.lic ابتدا می‌گردد، سپس Doconut.Viewer.lic، به‌علاوه هر افزونه‌ای
// Doconut.Viewer.<Capability>.lic فایل‌ها در کنار آن.
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 موفق می‌شود، سایت شروع می‌شود و نمایشگر اجرا می‌شود، اما هر صفحه یک واترمارک ارزیابی دارد و هیچ قابلیت اختیاری اعطا نمی‌شود.

یک فایل مجوز که پیدا می‌شود اما رد می‌شود متفاوت است. امضای نامعتبر، دستکاری، یا ساختی خارج از بازه نسخه مجوز باعث می‌شود 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 خالی برمی‌گرداند — صفحه خطا نیست، ردگیری پشته نیست، چیزی در لاگ IIS نیست. استثنا فقط در لاگ رویداد ویندوز (لاگ برنامه، منبع ASP.NET) ثبت می‌شود. اگر کل سایت بلافاصله پس از افزودن یک خط AddPlugin متوقف شد، قبل از کد فایل‌های مجوز را در wwwroot بررسی کنید: Doconut.Viewer.<Capability>.lic افزونه باید کنار Doconut.Viewer.lic قرار گیرد، و بدون مجوز پایه فایل‌های افزونه اصلاً خوانده نمی‌شوند.

تأیید مجوز بارگذاری‌شده

IDoconutLicenseService همان منبع حقیقتی است که SDK استفاده می‌کند. آن را از DoconutHost.Services حل کنید تا یک نقطه انتهایی تشخیص معتبر را افشا کنید یا پرچم‌های ویژگی را فعال کنید — هرگز محتوای مجوز را برنگردانید:

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 خوانده می‌شود. پس از جایگزینی فایل مجوز، استخر برنامه را بازچرخانی کنید (یا Web.config را تغییر دهید) تا Application_Start دوباره اجرا شود.

عیب‌یابی

علائمعلت محتملبررسی
نمایشگر کار می‌کند اما هر صفحه واترمارک داردهیچ مجوزی یافت نشدآیا .lic در <site root>\wwwroot وجود دارد؟ نقطه انتهایی وضعیت بالا را فراخوانی کنید
هر درخواست یک 500 خالی برمی‌گرداند بلافاصله پس از افزودن یک افزونهیک افزونه ثبت‌شده مجوزی برای آن نداردلاگ رویداد ویندوز، منبع ASP.NET؛ .lic افزونه کنار Doconut.Viewer.lic
LicensePath روی ماشین شما کار می‌کند اما روی سرور نهمسیر نسبی که نسبت به پوشه فرآیند کارگر حل می‌شودآن را با HostingEnvironment.MapPath("~/wwwroot/...") بسازید
فایل .lic جایگزین شده تأثیری نداردمجوز هنگام شروع برنامه خوانده شداستخر برنامه را بازچرخانی کنید
OpenDocumentAsync پرتاب می‌کند LicenseExceptionمجوز پیدا شد اما رد شدپیام استثنا را بخوانید؛ آن را به مشتریان غیرقابل اعتماد نشان ندهید

گام‌های بعدی

  • مجوزدهی — قابلیت‌ها، و چگونگی بررسی آن‌ها در زمان اجرا.
  • عیب‌یابی — واترمارک‌ها، خطاهای راه‌اندازی، و سایر علائم.

آیا این صفحه مفید بود؟