ייצוא SSRS נכשל דרך פורטל VPN ללא לקוח: מה שונה
עמוד הדוח מוכיח רינדור, לא ייצוא. עקבו אחר בקשת הייצוא דרך הפורטל, השוו כותרות וגוף, ואז הגבילו כל חריגה בצורה צרה.
הדוח נפתח בדפדפן, הפרמטרים מרונדרים, וכפתור הייצוא מייצר שגיאה, הורדה ריקה או קובץ שגיליון הגיליון מסרב לפתוח. לשילוב הזה יש צורה סטנדרטית. עמוד דוח עובד בדק רינדור ואימות ולא דבר אחר. הייצוא הוא בקשה נפרדת עם תגובה משלו, ודרך פורטל ללא לקוח הוא גם עובר שכבת שכתוב שמעולם לא תוכננה להורדות קבצים.
שני מסלולים, עמוד עובד אחד
רינדור וייצוא הם פעולות שונות גם כשהן מתחילות מאותו כפתור. שרת הדוחות מרנדר את העמוד עבור דפדפן ומרנדר את הייצוא דרך הרחבת פלט אחרת עם סוג תוכן משלה והתנהגות שגיאה משלה, כפי שמתארת תיעוד הייצוא. פורטל שמעביר את הראשון בצורה מושלמת עדיין עלול לקלקל את השני, כי השני הוא תגובה שהפורטל לא ציפה לראות. השניים חולקים סשן וכתובת, וכמעט שום דבר אחר.
התייחסו לעמוד העובד כראיה לאימות ולנגישות בלבד. הוא מוכיח שהחשבון יכול להגיע לשרת הדוחות ושהפורטל מעביר HTML. הוא לא אומר דבר על תגובות קבצים, כותרות מיקום תוכן או הפניות שמסתיימות בהורדה ולא במסמך.
זו כל הסיבה להשוות את מסלול הייצוא בפני עצמו במקום לבדוק שוב את העמוד שכבר עובד. שתי בקשות שחולקות סשן הן עדיין שתי בקשות.
שלושה תנאים שקובעים היכן הייצוא נשבר
שלוש שאלות ממקמות את התקלה במהירות, וכל תשובה מצביעה על בעלים אחר.
ראשית, האם אותו דוח, אותו חשבון ואותו פורמט מיוצאים כראוי מהרשת הפנימית? אם כן, שרת הדוחות והמרנדר שלו תקינים וההבדל במסלול הגישה. שנית, האם התגובה הכושלת נושאת סוג תוכן של קובץ, או עמוד HTML שעוטה סיומת קובץ? זה מפריד בין תקלת מרנדר לבין החלפה של הפורטל. שלישית, האם הפורטל משכתב את כתובת ה-URL של הבקשה או מסיר כותרות מהתגובה? כתובת URL משוכתבת עשויה לנחות בנקודת קצה אחרת לגמרי.
ענו על שלושתן לפני שינוי הגדרה, כי לכל אחת תיקון שונה. תקלת מרנדר שייכת לשרת הדוחות, גוף מוחלף שייך לפורטל, וכותרת שהוסרה היא שאלת מדיניות ולא תקלה.
רשמו את התשובות. מקרה תמיכה שנבנה משלוש השורות האלה שווה עשרה צילומי מסך.
קראו את תגובת הייצוא ולא את קוד הסטטוס
סטטוס HTTP מוצלח מוכיח רק שמשהו ענה לבקשה. בדקו את הגוף ואת הכותרות יחד, כי התקלה המעניינת היא תגובה מוצלחת שנושאת תוכן שגוי.
curl -sS -D export.headers -o export.bin --location "https://portal.example.com/reports/export?format=xlsx"
file export.bin
head -c 300 export.bin
פלט הכותרות מציג את סוג התוכן ואת כל מיקום תוכן שהפורטל החזיר. הפקודה file מזהה מה הגוף באמת, וקובץ טקסט במקום שבו צפוי גיליון הוא עמוד הכניסה המוחלף הקלאסי. הפקודה head מציגה מספיק כדי לזהות HTML בלי לשפוך דוח שלם לטרמינל.
הסירו קובצי cookie של סשן ואסימונים לפני שיתוף של כל חלק מזה. תיעוד של ייצוא עובד הוא ראיה שימושית, ותיעוד של סשן של מישהו אחר הוא אירוע.
הגבילו את החריגה ליישום, לא לחשבון
אם הפורטל משכתב או חוסם את התגובה, התיקון המפתה הוא לפטור את כל האתר או להפוך את הדוח לאנונימי. שניהם מתקנים את ההורדה ומסירים את הסיבה שהפורטל קיים. חריגה מוגבלת מגדירה מסלול יישום אחד, סוג תוכן אחד וכיוון אחד, והיא נשארת ניתנת לסקירה על ידי מי שמחזיק במדיניות.
השתמשו בגרסת השער שאתם מפעילים בפועל ובהגדרות היישום המתועדות שלה. אפשרות שספק תיאר פעם ככזו שמשאירה תעבורה ללא שינוי אינה הוראה כללית, והעתקתה משרשור פורום ישן היא הדרך שבה חריגה זמנית הופכת לארכיטקטורה קבועה.
אם לא ניתן להגביל את החריגה כל כך בצורה צרה, הייצוא כנראה שייך למסלול הפנימי עם שיטת גישה אחרת ולא מאחורי הפורטל. פטור לכל האתר הוא החלטה של בעל הפורטל, לא עקיפה לדוח אחד.
קבלו את הייצוא, לא את תיבת השמירה
הבדיקה האחרונה היא הקובץ עצמו: הוא נפתח, הוא מחזיק בעמודות הצפויות, והסכומים שלו תואמים לדוח שהמשתמש אישר.
הופעת תיבת שמירה אינה הצלחה, וקובץ שנפתח עם אזהרת תיקון גם הוא אינו הצלחה. השוו ספירת שורות וערך ידוע אחד לדוח שעל המסך, כי ייצוא קטוע עובר כל בדיקה שמסתכלת רק על גודל הקובץ. לאחר מכן ייצאו פעם שנייה, כי שכבת מטמון שמגישה פעם אחת את הגוף השגוי עשויה להגיש את הנכון בניסיון הבא.
קבלו את זרימת העבודה שהמשתמש היה צריך, ולא פחות מכך. הורדה שנפתחת ביישום הלא נכון היא עדיין ייצוא כושל.