Netwise English
אודות
הפילוסופיה שלנו
חדשות ואירועים
הלקוחות שלנו
ספריית מאמרים
Netwise Experts
ארכיון ניוזלטר
דרושים
צור קשר
הוראות הגעה
 
ספריית מאמרים לספריית מאמרים  לארכיון מאמרים
Server.Transfer לעומת Response.Redirect
המאמר המקורי של קארל מור (MCSD, MVP), מחבר ספרי טכנולוגיה ומרצה בכנסי תעשייה ורדיו ומנהל חברת ייעוץ עצמאית, תורגם על-ידי איתי גופר, מתכנת בצוות שרת התשלומים של Netwise - יוני 2005
תקציר המאמר:
המאמר עוסק בהבדלים הבסיסיים בין שתי שיטות של הפניה לדף: server.Transfer ו Response.Redirect. המאמר מעודד להשתמש ב Server.Transfer , שהשימוש בה פחות נפוץ, ומסביר באילו מצבים עדיף לעשות כן ומדוע.
אם אתה קורא הרבה מגזינים תעשייתיים ודוגמאות קוד של ASP.NET אתה עשוי לגלות שלמרות שהרוב הגדול משתמש ב- Response.Redirect כדי להפנות את הדפדפן לדף אחר, אחרים מעדיפים להשתמש ב Server.Transfer המסתורי משהו. אז מהם ההבדלים ביניהם?
ובכן Response.Redirect פשוט שולח הודעה לדפדפן ואומר לו לעבור לדף אחר.
דוגמא לקוד המאפשר להעביר משתמש לדף אחר
אז על מנת להעביר משתמש לדף אחר אפשר לכתוב קוד כזה:
("Response.Redirect ("WebForm2.aspx
או כזה
("/Response.Redirect ("http://www.ecom.gov.il

Server.Transfer דומה בכך שהיא גם כן מפנה את הדפדפן לדף אחר, אולם יש לה מספר יתרונות וחסרונות ברורים.

המתודה נראית כך:
("Server.Transfer ("WebForm2.aspx
יתרונות Server.Transfer וחסרונותיו
יתרון ראשון הוא שהעברת משתמש לדף אחר באמצעות Server.Transfer חוסכת במשאבים של השרת. במקום להגיד לדפדפן לפנות לדף אחר, הפקודה פשוט משנה את "הפוקוס" בשרת ומעבירה את הבקשה. המשמעות של זה היא שהרבה פחות בקשות HTTP עוברות בין הדפדפן לשרת, מה שמקל את העומס על השרת וגורם לאפליקציה שלך לרוץ מהר יותר.
אולם יש לשים לב לחיסרון: כיוון שתהליך ה-"transfer" יכול לעבוד רק על האתרים הנמצאים בשרת אין אפשרות להשתמש ב Server.Transfer על מנת להפנות לאתרים חיצוניים. רק Response.Redirect יכולה לעשות את זה.
יתרון שני הוא ש-Server.Transfer משמרת את ה-url המקורי בדפדפן. זה עשוי להועיל בטכניקות של העברת נתונים (Streamline data entry techniques). אולם יש לשים לב כי זה עשוי לגרום בלבול בתהליך הדיבאג (Debugging).
תוכניות מבוססות קלט
שזה עדיין לא הכל: למתודת ה-Server.Transfer יש פרמטר נוסף: preserveForm. אם קובעים אותו ל-True, משתמשים בשורת קוד הנראית כך:
(Server.Transfer("WebForm2.aspx", True
ה-QueryString הקיים וכל משתנה אחר של ה-Form יישארו זמינים גם בדף שאנחנו מעבירים אליו.
לדוגמא, נניח שלדף WebForm.aspx יש תיבת טקסט שנקראת TextBox1 ואנחנו מפנים לדף שנקרא WebForm2.aspx כאשר משימים לפרמטר preserveForm ערך True, יהיה אפשר לאחזר את הערך של TextBox1 מהדף המקורי על ידי הפניה הבאה:
("Request.Form("TextBox1
הטכניקה הזו מצוינת לתוכניות מבוססות קלט בסגנון "אשף" (Wizard-style) אשר מורכבת ממספר גדול של דפים (Multiple pages). אולם יש דבר נוסף שיש לתת עליו את הדעת לפני שמשתמשים בפרמטר ה-preserveForm: ל-ASP.NET יש באג, במצבים מסוימים תחול שגיאה כאשר מנסים להעביר את ה-form ואת ערכי ה-QueryString. מידע נוסף הקשור לבאג אפשר למצוא בקישורית:
http://support.microsoft.com/default.aspx?id=kb;en-us;Q316920
הפתרון הבלתי רשמי לבאג הוא הגדרת ערך True למאפיין enableViewStateMac בדף אליו אנחנו רוצים להפנות, ואז להגדיר לו חזרה את הערך False. פעולה זו "מאלצת" את המערכת להכיר בעובדה שאתה רוצה בערך False למאפיין הזה ופותרת את הבאג.
סיכום
אז בקצרה: Response.Redirect פשוט אומרת לדפדפן לבקר בדף אחר. לעומת זאת Server.Transfer עוזרת להפחית את כמות הבקשות מהשרת, לא משנה את ה-url ובעזרת פתרון באג קטן מאפשרת להעביר פרמטרים של ה-QuertyString וה-form.
טיפ אחרון לסיום
אל תבלבלו בין Server.Transfer לבין Server.Execute, שמריצה את הדף ומחזירה את התוצאות. היא הייתה שימושית בעבר, אבל עם ASP.NET היא הוחלפה במתודות של Refresh.
 
שלח עמוד לחבר הדפס עמוד לראש הדף