كيفية تكوين Doconut للنشر على خوادم موزعة
← Back to Blog••4 min read

كيفية تكوين Doconut للنشر على خوادم موزعة

استخدام Doconut في تكوين الخادم الموزع

عندما تحتاج إلى تقديم ملفات PDF أو ملفات Office أو رسومات CAD أو صور من مجموعة من عقد ASP.NET Core، يتيح الوضع الموزع في Doconut لكل عقدة قراءة نفس قطع الصفحات من موقع مشترك. النتيجة هي عارض آمن قابل للتوسع أفقياً يعمل خلف موازن تحميل دون جلسات ثابتة.

لماذا الوضع الموزع مهم

  • القابلية للتوسع – يمكن لكل عقدة نشر الصفحات إلى مشاركة UNC أو سحابة؛ يمكن لأي عقدة أخرى تقديمها فوراً.
  • الأمان – يتم تخزين القطع مشفرة في المجلد المشترك؛ يتحقق العارض من كل طلب مقابل رمز جلسة ASP.NET.
  • عدم الاعتماد على Office – يعمل ملحق Converter على الخادم، محولاً ملفات Word وExcel وPowerPoint وCAD والصور إلى PDF أو صور دون تثبيت Microsoft Office.

تتيح هذه الخصائص للأنظمة المؤسسية مثل DMS وCRM أو بوابات التعلم الإلكتروني الحفاظ على معالجة المستندات داخل الواجهة الخلفية لـ .NET مع التوسع إلى عشرات الحاويات.

التخزين المشترك للوضع الموزع

في الوضع الموزع، يتوقع Doconut أن تُكتب قطع الصفحات (صفحات PDF، قطع الصور، إلخ) إلى موقع تخزين يمكن الوصول إليه من قبل كل عقدة في المزرعة – مشاركة شبكة، حاوية Azure Blob، دلو S3، أو أي تخزين مشترك آخر يدعمه ميزة النشر السحابي المتقدم. يبحث العارض تلقائياً عن مجلد القطع الذي يتطابق مع رمز الأمان لكل مستند، لذا لا يلزم أي كود إضافي بخلاف التأكد من أن جميع العقد لديها نفس صلاحيات القراءة والكتابة إلى التخزين المختار.

نصيحة: استخدم نفس مسار UNC (مثال، \\fileserver\doconut) أو عنوان URL سحابي في إعداد كل نسخة واحرص على أن تكون أذونات المجلد متسقة. سلوك UsePerTokenSubfolders مُفعَّل افتراضياً ويعزل صفحات كل مستند.

تسجيل Doconut ووسيط الجلسة

يعتمد Doconut على حالة جلسة ASP.NET Core لأمان كل مستند. يُطلب ذاكرة تخزين مؤقت موزعة فقط عندما تستخدم مشروع minimal‑API؛ حيث يضيف MVC أو Razor Pages واحدة بالفعل.

builder.Services.AddDoconut(options =>
{
    options.LicensePath = "Doconut.Viewer.lic";
});

builder.Services.AddDistributedMemoryCache(); // الجلسة تحتاج إلى ذاكرة تخزين مؤقت
builder.Services.AddSession();                 // Doconut يتحقق من الجلسة

app.UseSession();               // يجب تشغيله قبل UseDoconut()
app.UseDoconutResources();      // يسجل أصول المشاهد الثابتة
app.Map("/doconut", branch => branch.UseDoconut());

مسارات مخصصة (اختياري)

إذا كان هناك مسار آخر يتعارض مع /doconut، غيّر المسارات مرة واحدة واحرص على مزامنة العميل BasePath:

builder.Services.AddDoconut(options =>
{
    options.MiddlewarePath = "/docs-engine";
    options.ResourcesPath  = "/docs-assets";
});
app.UseDoconutResources();
app.Map("/docs-engine", branch => branch.UseDoconut());

لا تسبق MiddlewarePath أو ResourcesPath بشرطة مائلة في البداية؛ يضيف العارض الشرطة تلقائياً.

تجميع كل شيء معاً: مثال Minimal‑API

فيما يلي إعداد مختصر وجاهز للإنتاج يجمع بين متطلبات التخزين المشترك، معالجة الجلسة، وتسجيل Doconut.

var builder = WebApplication.CreateBuilder(args);

// 1️⃣ تسجيل Doconut الأساسي
builder.Services.AddDoconut(options =>
{
    options.LicensePath = Path.Combine(
        AppContext.BaseDirectory, "wwwroot", "Doconut.Viewer.lic");
    options.MiddlewarePath = "/doconut";
    options.ResourcesPath  = "/doconut-res";
});

// 2️⃣ الجلسة والذاكرة المؤقتة (مطلوب للأمان)
builder.Services.AddDistributedMemoryCache();
builder.Services.AddSession();

var app = builder.Build();

app.UseRouting();
app.UseSession();
app.UseDoconutResources();                     // حزمة المشاهد الثابتة
app.Map("/doconut", branch => branch.UseDoconut());

app.Run();

انشر هذا الملف الثنائي إلى أي عدد من حاويات Docker أو خدمات Windows خلف موازن تحميل. طالما أن كل نسخة يمكنها الوصول إلى موقع التخزين المشترك الذي قمت بتكوينه لقطع الصفحات، سيسترجع العارض الصفحات من أي عقدة، وستستمر عمليات التحميل/التحويل عبر تنقلات العقد.

النشر خلف موازن تحميل

  1. عرض نفس عنوان URL الأساسي (مثال، http://myapp.com على كل عقدة).
  2. تعطيل الجلسات الثابتة – يزيل الوضع الموزع في Doconut الحاجة إلى ارتباط الجلسة.
  3. التأكد من مراقبة الصحة يتحقق من نقطة نهاية أساسية لتطبيقك (مثال، /health) بحيث يوجه الموازن الحركة فقط إلى العقد الحية.
  4. راقب المجلد المشترك للنمو؛ TTL الافتراضي لمدة 30 دقيقة يحافظ على حدود التخزين، لكن يمكنك تعديلها وفق احتياجات الامتثال.

مع هذه الخطوات، يمكن لتطبيق .NET المكثف بالمستندات الخاص بك خدمة آلاف المشاهدين المتزامنين، والحفاظ على تشفير كل صفحة أثناء التخزين، وتجنب عبء تثبيت Office على كل خادم.

هل أنت مستعد لتجربتها؟ احصل على نسخة تجريبية مجانية من Doconut، شغّل عدة حاويات، وجهها إلى مسار UNC مشترك، وشاهد العارض يتوسع دون أي ملف تعريف ارتباط لجلسة ثابتة.

#dotnet#distributed#web‑farm#document‑viewer#scaling#دوت نت#موزع#مزرعة ويب#عارض مستندات#التوسع