DoconutExtensions
تسجيل الخدمات والوسطيات
DoconutExtensions (namespace Doconut.Middleware) هو الفئة الثابتة التي تحتوي على الثلاث استدعاءات التي يقوم بها كل مضيف Doconut: تسجيل خدمة واحدة وتسجيلين للوسطية.
builder.Services.AddDoconut(options => { /* … */ });
// …
app.UseDoconutResources(); // قبل UseDoconut()
app.UseDoconut();AddDoconut
IServiceCollection AddDoconut(this IServiceCollection services, Action<DoconutOptions>? configure = null)يبني الـ DoconutOptions، يتحقق من صحتها بسرعة الفشل (انظر DoconutOptions → التحقق من بدء التشغيل)، ويسجل الرسم البياني الكامل للخدمة:
| الخدمة | مدة الحياة | الدور |
|---|---|---|
DoconutOptions | Singleton | كائن التكوين |
| خدمة ذاكرة التخزين المؤقت للجلسة | Singleton | Token → ذاكرة التخزين المؤقت للجلسة (IMemoryCache مسجل أيضًا) |
IDoconutLicenseService | Singleton | الرخصة تُحمَّل مرة واحدة عند بدء التشغيل (الأولوية: LicenseStream → LicenseContent → LicensePath → البحث التلقائي) |
| خط أنابيب صورة الصفحة | Singleton | ينفّذ معالجة الصور للصفحات (علامة مائية، تدوير، تحجيم، تعليقات توضيحية) |
| أمان المستند (مخزن الوصول) | Singleton | يمنح ربطًا بين الرمز والجلسة |
Viewer | Transient | الواجهة العامة للفتح/الإغلاق |
DocumentConverter | Transient | واجهة التحويل — تتطلب مكوّن Converter |
DistributedDocumentPublisher | — | ينشر مخرجات المستند إلى التخزين المشترك |
Health check "doconut" | — | يُبلغ عن حالة الرخصة/انتهاء الصلاحية عبر فحوصات الصحة في ASP.NET |
لا يوجد استدعاء مكافئ في مكتبة .NET Standard السابقة. كانت تُنشئ new Viewer(cache, accessor) لكل طلب وتُمرّر الخيارات إلى الوسطية؛ كلاهما تم استبدالهما بهذا التسجيل الواحد.
سلوكان يستحقان المعرفة:
- Converter يتطلب المكوّن الخاص به. حل
DocumentConverterبدونoptions.AddPlugin<ConverterPlugin>()يثير استثناء:
InvalidOperationException: No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().- تم التحقق من استحقاق المكوّن عند بدء التشغيل. رخصة مفقودة، ملف
TRIALقديم، أو رخصة مدفوعة بدون قدرة مكوّن مسجل تفشل في وقتAddDoconut(). التسجيلات المؤقتة/التجريبية تبقى بعد تاريخ انتهاء صلاحيتها، بينما البوابات أثناء التشغيل تُلغي القدرات المنتهية.
يتكامل فحص الصحة مع آلية ASP.NET Core القياسية — قم بربطه إذا أردت حالة الرخصة على نقطة صحة التطبيق الخاصة بك:
app.MapHealthChecks("/health");UseDoconut
IApplicationBuilder UseDoconut(this IApplicationBuilder app)يضيف وسطية Doconut لمعالجة صور الصفحات. يرد على كل طلب يحمل معامل استعلام ?token= — الصفحات، المصغرات، البحث، التعليقات التوضيحية، إجراءات الصفحة (جدول الطلب الكامل موجود في المفاهيم الأساسية → كيف يعمل العارض). عندما يكون UnsafeMode هو false، يتم ربط طبقة أمان المستند تلقائيًا قبلها.
لا يأخذ أي معطيات. تمرير نسخة من DoconutOptions هنا كان شكل المكتبة السابقة ولم يعد يُترجم.
العينة المرجعية توجه طلبات الودجت عبر فرع مسار، محافظةً على شكل الطلب التاريخي:
app.MapWhen(
ctx => ctx.Request.Path.Value?.EndsWith("DocImage.axd", StringComparison.OrdinalIgnoreCase) == true,
branch => branch.UseDoconut());UseDoconutResources
IApplicationBuilder UseDoconutResources(this IApplicationBuilder app)يخدم ملفات JS و CSS والصور والخطوط المدمجة عند DoconutOptions.ResourcesPath (الافتراضي /doconut-res). هذه هي الملفات التي تُصدر لها العلامات Viewer.ReferenceCss() / ReferenceScripts().
دائمًا استدعِه قبل UseDoconut(). إذا ظلت منطقة العارض فارغة وأظهر سجل المتصفح أخطاء 404 لـ /doconut-res/...، فهذا الاستدعاء مفقود أو في غير مكانه.
هذا هو البديل المدعوم لتوصيل وسطية معالجة الموارد المدمجة يدويًا.
Serving from shared storage
هناك تسجيلان إضافيان للعمليات التي يتم فيها تقديم مستند من عقدة لا تكون بالضرورة هي العقدة التي تخدم صفحاته. كلاهما مغطى من البداية إلى النهاية في التوزيعات الموزعة؛ التواقيع هي:
IServiceCollection AddDoconutDistributedAsyncPublish(...) // قائمة انتظار النشر الخلفية الاختيارية
IServiceCollection AddDoconutDistributedWidgets(...) // مخزن خلفي مشترك لتحميلات widgetجانب القراءة هو وسطية منفصلة عن حزمة Doconut.Clouds:
IApplicationBuilder UseDoconutCloud<THandler>(
this IApplicationBuilder app,
Action<CloudOptions>? configure = null,
string pathPrefix = "/doconut-cloud")
where THandler : BaseCloudHandlerUseDoconutWebFarm(...) و WebFarmOptions غير موجودين في هذا الإصدار. راجع دليل الترحيل للحصول على خريطة الإعدادات خطوة بخطوة.
Ordering recap
app.UseRouting();
app.UseSession(); // مطلوب عندما UnsafeMode = false
app.UseDoconutResources(); // المكالمة الأولى لـ Doconut
app.UseDoconut(); // المكالمة الثانية لـ Doconut (أو عبر فرع MapWhen)هل كانت هذه الصفحة مفيدة؟