איך האתר שלי רץ ?

AviramJ

New member
איך האתר שלי רץ ?

כתבתי אתר שמשלב מפר עמודי HTML וקוד צד שרת בסי שארפ (ASP NET) כאשר אני מקמפל - נוצר DLL הנושא את שם הפרוייקט שלי, בתקיית ה BIN של הפרוייקט. מה בדיוק מכיל ה DLL הזה ? ואיך הוא רץ ? (זה לא EXE...)
 

AviramJ

New member
את זה גם אני יודע ../images/Emo13.gif

אבל מי בדיוק קורא ליוזר ASPNET_WP, ומה הוא עושה ?
 

gilad g

New member
aspnet_wp הוא לא יוזר

הוא תוכנה (EXE
) מי שקורא לו הוא מודול ה-ISAPI של asp.net (מודול ISAPI זה כמו פלאג-אין כזה ל-IIS). מה שהיא עושה זה בעצם לטעון את ה-DLL שלך, לקמפל את ה-ASPX, ולהריץ את הדף שלך בהתאם ל-Page Lifecycle.
 

AviramJ

New member
הוא טוען את ה DLL...

השימוש ב DLL לאחר הטעיה, תהיה רק כאשר מתוך דף ה ASPX תהיה פניה לקוד צד שרת ?
 

gilad g

New member
לא הבנתי...

ASPX הוא קוד צד שרת. כשהלקוח מבקש את דף ה-ASPX שלך, ה-codebehind שלו נטען.
 

AviramJ

New member
אבל ה ASPX מחולק ל 2, א ?

יש את עיצוב ה HTML שהוא יושב בתוך ה ASPX, ויש את צד השרת שזה קסצי ה cs...
 

gilad g

New member
לא,

כשאני אומר aspx, אני מתכוון לקובץ ה-aspx, לא ל-codebehind (קובץ aspx.cs).
 

AviramJ

New member
בלבלת אותי לגמרי ../images/Emo13.gif

יש לי קובץ mypage.aspx שבו כתוב קוד HTML לכל דבר (פרט לפקדים עם התוספת :asp לפניהם) יש לי קובץ mypage.aspx.cs שבו יש קו צד שרת, פניות ל DB וכו'. נניח וזה כל הפרוייקט/אתר שלי. האם מה שאני עומד לכתוב, נכון ?
הקובץ mypage.aspx.cs מתקמפל ל DLL בזמן ה BUILD. כאשר מישהו מבקש את mypage.aspx הוא מתקמפל (בפעם הראשונה) 0 והפלט (HTML !!) נשלח ללקוח. במידה ומתוך דף ה HTML שנשלח ללקוח יש פניה לקוד צד שרת (למשל : נלחץ כפתור שיש לו ארוע צד שרת שמקושר אליו), אז יש פניה ל DLL שנוצר בזמן ה BUILD לפרוייקט (זמן ה DESIGN), הקוד רץ - ובסוף נשלח שוב ה HTML ללקוח. האם אני מדייק ?
 

AviramJ

New member
מדוע ה ASPXצריך להתקמפל ?

הוא מיך HTML לכל דבר, פרט לכמה קידומות של :asp ואגב, אם מה שכתבתי מדוייק, זה אומר שאין שום דבר שירוץ ללא קמפול ? כל דבר יעבור קימפול לפני התצוגה ללקוח ?
 

gilad g

New member
המממ

"הוא מיך HTML לכל דבר, פרט לכמה קידומות של :asp" לא מדויק. דף ASPX הוא HTML + פקדים (asp:bla) + תגיות <script runat=server>. הפקדים עוברים תרגום ל-CS, כי הפקדים הם בעצם מחלקות, שנמצאות ב-System.Web.dll. כמו כן, אם יש תגיות <script>, גם מה שכתוב בהן צריך לעבור קימפול. "זה אומר שאין שום דבר שירוץ ללא קמפול ? כל דבר יעבור קימפול לפני התצוגה ללקוח ? " כן, כל פיסת קוד חייבת לעבור קימפול.
 

AviramJ

New member
הממממממ X 2 ../images/Emo13.gif

הבנתי, נשמע הגיוני
כלומר <asp:Lable> עובר תרגום למשהו אחר, ולכן הקוד צריך להתקמפל. 1. האם אפשר לראות דוגמא קטנה של תרגום כזה ? 2. אם המחלקות יושבות ב System.Web.dll, ואני משתמש בקידומת :asp אז לא צריך להיות לי בראש העמוד @ Register TagPrefix שאומר מהי הקידומת :asp ? (כמו שעושים למשל קידומת iewc ל Microsoft.Web.UI.WebControls ? 3. מה ההבדל בין תג script שמצויין בו runat=server, לבין פונקציה שמוגדרת לי ב aspx.cs ? 4. אם בעמוד ה aspx יש לי רק HTML טהור, האם גם אז הוא יעבור קמפול ?
 

gilad g

New member
תשובות ../images/Emo26.gif

1. כן, ראה קובץ מצורף -- פתח שם את "Show Complete Compilation Source".
2. לא, יש לך prefix ברירת מחדל, שמוגדר לך כבר מאחורי הקלעים. 3. פונקציה שמוגדרת לך בתגיות סקריפט מתקמפלת בזמן ריצה, וקוד שנכתב ב-codebehind מתקמפל ב-design time. יש עוד הבדלים, אבל זה העיקרי. 4. כן, אם הסיומת שלו היא aspx. לא יהיה הרבה מה לקמפל במקרה הזה, אבל זה מה שיקרה. שים לב שתגיות שיש להם runat=server (גם אם הן תגיות <input>, למשל) יעברו parsing ע"י השרת, ויתורגמו למחלקות HtmlInputText, HtmlImage, וכו'... בדוק בניימספייס System.Web.UI.HtmlControls - יש שם את הרשימה המלאה.
 

AviramJ

New member
שאלות ../images/Emo13.gif

1. תודה. 2. היכן מוגדר ה PREFIX הזה ? ניתן לשנותו ? ואם הוא היה מוגדר בתוך קובץ ה ASPX הוא היה מוגדר בדומה ל @ Register TagPrefix ? 3. תודה 4. תג img (למשל) שיש לו runat=server מתורגם ל HtmlImage ? האם יש הבדל בין אובייקט (IMG למשל) שיש לו runat=server, לבין אובייקט שמוגדר עם קידומת ה :asp ? תודה
 

gilad g

New member
הממ

2. לא יודע איפה הוא מוגדר, ולא, אני לא חושב שאפשר לשנות אותו (בשביל מה לך לשנות אותו?
) כן, אפשר לומר. 4. כן. בדר"כ HTML Controls (אלו עם הקידומת Html), הם יותר פרימיטיביים ובעלי פחות פונקציונליות מ-WebControls (אלו עם asp:..). מצאתי קישור בנושא.
 

AviramJ

New member
4. התכוונתי יותר מבחינת הטיפול..

הבנתי שאם בעמוד ה HTML שהוא בעצם עמוד ASPX יש לי פקד מסוג <asp:X> למשל, אז רק כאשר הדף נקרא בפעם הראשונה, אז הוא מקומפל, והפקד הנ"ל מוחלף במחלקה האמיתית שהוא מייצג. מה קורה לתג "רגיל" כגון IMG שהחלטתי שהוא runat=server, האם גם בו יתבצע טיפול בקימפול הראשון (בבקשה הראשונה) של ה ASPX, והוא יוחלף בפקד ה HtmlImage or Whatever הרלוונטי ?
 

nattygur

New member
ה ISAPI לא טוען את ה DLL

מה שקורה כאן מאוד מעניין וזה בעצם מסביר את ההבדל העקרי בין IIS5 לבין IIS6. הפילטר מפעיל Pipe שהוא אוביקט של מערכת ההפעלה אשר הוא אחד מהדרכים לשתף נתונים בין פרוססים (היותר יעיל). על ה Pipe הזה עוברים הנתונים של הבקשה ל aspnet_wp והוא זה אשר מייצר application doamin אם יש צורך וטוען את ה DLL. לעומת זאת ב IIS6 המנגנון שונה. ה w3wp שהוא הפרוסס של ה Net. בעל HTTP.SYS ברמת מערכת ההפעלה אשר תופס בקשות ומעביר אותם ישירות אל w3wp. שינוי זה גורם להאצת הביצועים של asp.net. דרך אגב מי שקורא את המאמרים שלי שם לב כי גם ב Yukon יש שימוש באותו מנגנון בכדי לספק שרותי נתונים דרך webservice וגם ב Indigo יש שימוש ב http.sys בכדי להפוך שירוותי web service ליותר יעילים.
 

gilad g

New member
לזה התכוונתי ../images/Emo13.gif

ה-ISAPI טוען את aspnet_wp.exe, שטוען את ה-Assembly.
 
למעלה