פתרון בעיות
אבחון שגיאות נפוצות
רבות מכשלי 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 — נעילה | 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 (Event Viewer → Windows Logs → 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) במקום לערוך אותן ידנית, והעתק אותן שוב לאחר עדכוני חבילות.
אינך מורשה לצפות בדף זה.
הדף נדחה מכיוון שה‑session של ASP.NET המבקש מעולם לא קיבל את המסמך. בדוק, לפי הסדר:
- הפתיחה רצה עם מצב session. ב‑MVC controllers וב‑Web Forms pages יש זאת.
IHttpHandlerמותאם אישית שפותח מסמכים חייב לממש System.Web.SessionState.IRequiresSessionState, אחרת אין לו session להעניק. - מצב ה‑session פעיל.
<sessionState mode="Off" />מסרב לכל דף. - הקוקי מגיע למטפל. הבקשות מאותו מקור של ה‑widget נושאות
ASP.NET_SessionId; סקריפט, קריאה משרת‑לשרת, או דף חוצי‑מקור ללא קookies לא עושה זאת. - חוות רשת (Web farm): הפתיחה קשורה לדפדפן (
DocOptions.BrowserId) והדף מעביר את הכרטיס (objViewer.View(token, access)); כל צומת משתמש במפתח החתימה זהה.
הדחייה היא תמונה המוגשת עם סטטוס 200, בגודל כ‑2 ק״ב. מנגנון שמבצע בדיקה רק של קודי סטטוס סופר זאת כדף.
לא נמצא session של המסמך. אנא פתח את המסמך מחדש.
הטוקן פג (חלון זמן זז, DocOptions.TimeOut, ברירת מחדל 60 דקות), המסמך נסגר, או — בשרת יחיד — מאגר היישום (application pool) עבר ריסול. ריסול מתרחש לפי לוח זמנים, בכל עריכת 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 Server ללא Office מכיל פחות גופנים ממחשב פיתוח. התקן את הגופנים, או הפנה את FontFolders (ב‑WordConfig ו‑PptConfig) לתיקייה שמכילה אותם.
הערת תמונה מוצגת במציג אך הייצוא מציג תיבת "תמונה חסומה" — למארח התמונה יש כתובת פרטית או לופבק, והשרת מסרב לאחזר אותה. ראה הסברים.
תכונה עבדה במצב הערכה, שקטה בייצור
רישיון זמני פעיל מעניק כל יכולת; הרישיון שרכשת מעניק רק את מה שרכשת. ללא יכולת, קבצי החיפוש או ההערה שלו אינם נוצרים, ותוסף רשום עוצר את האתר באתחול. השווה את IsCapabilityGranted(...) עם כל תכונה שאתה משתמש בה לפני הפריסה.
החיפוש אינו מוצא דבר (או מעט מדי)
- עבור PDF,
AllowSearchלא היה מופעל כאשר המסמך נפתח — ברירת המחדל היאfalse. Word, Excel, ו‑PowerPoint מציגים את אותו המתג. - התוכן סרוק או רק תמונה, ולכן אין שכבת טקסט להתאמה.
- HTML ו‑Microsoft Project (MPP) אינם ניתנים לחיפוש בברירת המחדל שלהם: הגדר את
DefaultRender = falseכדי שהם יוצגו דרך פרויקט PDF עם טקסט. objViewer.CanSearch()הואfalseלאחר האתחול: הפורמט המפוענח אין לו נתיב חיפוש. זה נפרד מרישיון החיפוש; בדוק את שניהם.- הדף קורא את ערך ההחזרה של
objViewer.Search(...)— הספירה מגיעה בפרמטר השלישי שלו, קריאת חזרה (callback).
עדיין תקועים?
שחזרו את הבעיה עם ההגדרה המינימלית מהתחלה מהירה. אם זה משחזר שם, פנו לתמיכה עם המסמך, הGlobal.asax.cs שלכם, החלקים של Doconut בWeb.config, וכניסת יומן האירועים של Windows אם קיימת.
האם דף זה היה מועיל?