استكشاف الأخطاء وإصلاحها
تشخيص الأخطاء الشائعة
العديد من فشل System.Web لا تُظهر أي استثناء يمكنك رؤيته: الصفحة تُجيب بـ 500 فارغ، أو رمز أيقونة 404، أو طلب لا يعود أبداً. تم تنظيم هذه الصفحة وفقاً لما تلاحظه. الرسائل المقتبسة هي النص الحرفي الذي ينتجه Doconut.
الأعراض بنظرة سريعة
| ما تراه | السبب الأكثر احتمالاً | الإصلاح |
|---|---|---|
كل طلب يجيب بـ 500 فارغ | استثناء في Application_Start: مكوّن إضافي بدون ترخيصه، خيار غير صالح، تكوين مزرعة غير مكتمل — أو إعادة توجيه ربط يحدد نسخة غير موجودة في bin\ | سجل أحداث Windows، Application، المصدر ASP.NET. انظر فشل بدء التشغيل |
بعض صفحات MVC تجيب بـ 500 فارغ | Razor يُجمع العروض في وقت التشغيل: الواجهة netstandard مفقودة من <compilation>، أو العرض يستخدم C# أحدث من 5 (?., $"...", nameof) | أضف الواجهة (التثبيت); انقل المنطق من العرض إلى المتحكم |
الصفحات تُظهر —، … أو ما شابه بدلاً من الشرطات واللكنات | ملفات الصفحات بدون علامة ترتيب البايت تُقرأ بصفحة الترميز ANSI الخاصة بالخادم | <globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" /> |
تظهر وحدة تحكم المتصفح 404 لـ HEAD /DocImage.axd?...&page=1 | المعالج مسجل بدون الفعل HEAD | verb="GET,HEAD,POST" على المعالج |
| المستند يُعرض، لكن أيقونات شريط الأدوات ومؤشر التحميل مفقودة | ResPath يشير إلى جذر الموارد، أو يبدأ بـ / | ResPath: 'doconut-res/images' |
/doconut-res/... طلبات تجيب بـ 404 | وحدة الموارد غير مسجلة، runAllManagedModulesForAllRequests معطلة، أو توجيه MVC يلتقط المسار | الإدخال <modules>، و routes.IgnoreRoute("doconut-res/{*pathInfo}") |
العارض يُبلغ عن The viewer handler could not be reached (no response). | BasePath يبدأ بـ / ('/myapp' يصبح //myapp/…، مضيف آخر) | BasePath: '/' في جذر الموقع؛ 'myapp' في دليل افتراضي |
العارض يُبلغ عن Please make sure your middleware is configured. | DocImage.axd أجاب بـ 404: المعالج غير موجود في Web.config، توجيه MVC التقطه، أو BasePath يشير إلى مكان آخر | الإدخال <handlers>، routes.IgnoreRoute("{resource}.axd/{*pathInfo}")، و BasePath |
كل صفحة تُظهر You Are Not Authorized To View This Page. | تم فتح المستند في طلب بدون حالة جلسة، أو حالة الجلسة معطلة، أو ملف تعريف الارتباط للجلسة لا يصل إلى DocImage.axd | انظر غير مخول |
| تحويل Web Forms لا يعود أبداً | الصفحة تتوقف عند ConvertAsync — توقف (deadlock) | Async="true" + RegisterAsyncTask (ملحق المحول) |
| كل صفحة تحمل علامة مائية للتقييم | لم يُعثر على ترخيص — غير موجود في <site root>\wwwroot | إعداد الترخيص |
أداة تحميل، لكن الإجراء الأول يجيب بـ 404 | الأداة غير مفعلة، أو basePath الخاص بها ليس '/DocImage.axd' | options.Add…Widget()، و basePath: '/DocImage.axd' |
| المستند الأول بعد بدء الموقع أو إعادة تدويره يستغرق دقيقة أو أكثر؛ المستندات اللاحقة سريعة | محركات المستندات تُحمَّل عند الفتح الأول، ومكافحات الفيروسات في الوقت الحقيقي تفحصها أثناء التحميل | سخّن الموقع واستمر في تشغيل التجمع — انظر المستند الأول بعد بدء التشغيل |
| تحميل كبير يُظهر صفحة خطأ IIS | التحميل يتجاوز maxRequestLength (KB) أو maxAllowedContentLength (بايت) | ارفع كلا الحدين فوق أكبر ملف أو حد الأداة لديك |
فشل بدء التشغيل
استثناء يُرمى في Application_Start لا يصل إلى المتصفح: كل طلب يجيب بـ 500 فارغ، وسجل IIS لا يُظهر شيئًا مفيدًا. الاستثناء موجود في سجل أحداث Windows (عارض الأحداث → سجلات Windows → Application، المصدر ASP.NET). المعتادة هي:
مكوّن إضافي بدون ترخيصه:
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.يجب أن يكون Doconut.Viewer.<Capability>.lic الخاص بالمكوّن الإضافي موجودًا في wwwroot، بجوار Doconut.Viewer.lic. الترخيص المفقود وملف TRIAL القديم لا يمنح أي قدرات للمكوّن الإضافي.
خيارات غير صالحة:
DoconutOptions.MiddlewarePath must be a non-empty path starting with '/'.
DoconutOptions.ResourcesPath must be a non-empty path starting with '/'.
DoconutOptions.MiddlewarePath and ResourcesPath must be different paths.مجموعة لا يمكن تحميلها.
ASP.NET يحمل كل مجموعة في bin\ عند بدء التطبيق، لذا فإن إعادة توجيه الربط في Web.config التي تسمي نسخة غير موجودة في bin\ توقف الموقع بأكمله. انسخ عمليات إعادة التوجيه التي أنشأها NuGet (لمشروع بنمط SDK، من bin\<YourApp>.dll.config) بدلاً من تعديلها يدويًا، وانسخها مرة أخرى بعد تحديث الحزم.
غير مصرح لك بعرض هذه الصفحة.
تم رفض الصفحة لأن جلسة ASP.NET المطلوبة لم تُمنح المستند أبداً. تحقق، بالترتيب:
- تم تشغيل الفتح بحالة الجلسة. تمتلك وحدات تحكم MVC وصفحات Web Forms ذلك. يجب على
IHttpHandlerمخصص يفتح المستندات تنفيذSystem.Web.SessionState.IRequiresSessionState، وإلا لن تكون لديه جلسة لمنحها. - حالة الجلسة مفعلة.
<sessionState mode="Off" />يرفض كل صفحة. - الكوكي يصل إلى المعالج. طلبات الودجت من نفس الأصل تحمل
ASP.NET_SessionId؛ سكريبت، أو نداء من خادم إلى خادم، أو صفحة عبر أصل مختلف بدون كوكي لا تفعل ذلك. - مزرعة الويب: ربط الفتح المتصفح (
DocOptions.BrowserId) والصفحة تمرر التذكرة (objViewer.View(token, access))؛ كل عقدة تستخدم نفس مفتاح التوقيع.
الرفض هو صورة تُقدم بحالة 200، بحجم حوالي 2 كيلوبايت. المراقب الذي يتحقق فقط من رموز الحالة يعتبرها صفحة.
لم يتم العثور على جلسة المستند. يرجى إعادة فتح المستند.
انتهت صلاحية الرمز (نافذة منزلقة، DocOptions.TimeOut، الافتراضي 60 دقيقة)، أو تم إغلاق المستند، أو — على خادم واحد — تم إعادة تدوير مجموعة التطبيقات. يحدث إعادة التدوير وفق جدول، عند كل تعديل Web.config، وبعد انتهاء مهلة الخمول للمجموعة (20 دقيقة افتراضياً في IIS). افتح المستند مرة أخرى للحصول على رمز جديد.
فشل فتح المستند
LicenseException مع سبب الرفض — تم العثور على ملف الترخيص لكنه رُفض (توقيع غير صالح، تلاعب، إدراج في القائمة السوداء، أو بناء خارج نافذة إصدار الترخيص). يتم حظر الفتح بدلاً من وضع علامة مائية.
LicenseException:
This document type requires the 'Dicom' plugin license.يتم معالجة الامتداد فقط بواسطة ملحق (هنا DICOM) لم تُمنح قدرته.
FormatNotSupportedException — لا يوجد عارض (مدمج، ملحق، أو مخصص) يدعم هذا الامتداد. يمكن لـ DoconutOptions.RegisterViewer إضافة واحد لتنسيقاتك الخاصة.
InvalidDataException — المحتوى تالف أو لا يتطابق مع امتداده (ملف تم إعادة تسميته). تحقق من صحة التحميلات قبل الفتح.
InvalidOperationException:
No IDocumentConverter is registered. Add the converter plugin: options.AddPlugin<Doconut.Plugins.Converter.ConverterPlugin>().تم حل DocumentConverter دون تسجيل ملحق Converter.
المخرجات تبدو خاطئة
الصفحات تحمل علامة مائية — لم يُعثر على ترخيص، أو انتهت صلاحيته أو لا يغطي هذا الإصدار. تحت IIS، يجب أن يكون الترخيص في wwwroot تحت جذر الموقع (AppContext.BaseDirectory\wwwroot)، وليس في bin\. تحقق من IDoconutLicenseService (License.IsLicenseFileFound, IsExpired, IsVersionValid, License.RejectionMessage).
المستندات القديمة تُظهر نصاً مشوّشاً — سجّل ترميزات صفحات الشيفرة مرة واحدة، عند بدء التشغيل:
// Global.asax.cs, Application_Start - قبل DoconutHost.Initialize.
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);خطوط خاطئة أو مستبدلة — الخادم يفتقر إلى خطوط المستند. خادم Windows بدون Office يحتوي على خطوط أقل بكثير من جهاز التطوير. قم بتثبيت الخطوط، أو وجه FontFolders (على WordConfig و PptConfig) إلى مجلد يحتوي عليها.
تظهر تعليقة صورة في العارض لكن التصدير يحتوي على صندوق "Image blocked" — مضيف الصورة لديه عنوان خاص أو حلقة رجوع، يرفض الخادم جلبه. راجع التعليقات التوضيحية.
الميزة عملت في التقييم، صامتة في الإنتاج
ترخيص مؤقت نشط يمنح كل القدرة؛ ترخيصك المشتراة يمنح فقط ما اشتريت. بدون قدرة، لا يتم إصدار ملفات البحث أو التعليقات التوضيحية، وملحق مسجل يوقف الموقع عند بدء التشغيل. قارن IsCapabilityGranted(...) مع كل ميزة تستخدمها قبل النشر.
البحث لا يجد شيئًا (أو القليل جدًا)
- بالنسبة لملف PDF، لم يتم تمكين
AllowSearchعند فتح المستند — الإعداد الافتراضي هوfalse. Word وExcel وPowerPoint يعرضون نفس المفتاح. - المحتوى مُمسوح أو صورة فقط، لذا لا توجد طبقة نصية للمطابقة.
- HTML وMicrosoft Project (MPP) غير قابلين للبحث في إعداداتهم الافتراضية: اضبط
DefaultRender = falseلتُظهر عبر إسقاط PDF مع نص. objViewer.CanSearch()هوfalseبعد التهيئة: الصيغة المحلولة لا تملك مسار بحث. هذا منفصل عن ترخيص البحث؛ تحقق من كليهما.- الصفحة تقرأ قيمة الإرجاع لـ
objViewer.Search(...)— العدد يصل في الوسيط الثالث، وهو استدعاء رد.
ما زلت عالقًا؟
أعد إنتاج المشكلة باستخدام الإعداد الأدنى من البدء السريع. إذا تكررت هناك، اتصل بالدعم مع المستند، Global.asax.cs الخاص بك، أجزاء Doconut من Web.config، وإدخال سجل أحداث Windows إذا كان موجودًا.
هل كانت هذه الصفحة مفيدة؟