PracticU

Untyped Faults

בלי כתוביותעם כתוביות
PracticU › קורס WCF - תקשורת למתקדמים בדוט-נט › Untyped Faults
מילון מושגים:
חריגה - מצב שגיאה שמתרחש בזמן ריצת התוכנית ומפסיק את המהלך הרגיל, אלא אם הקוד תופס ומטפל בו.
לקוח - תוכנה או מחשב שפונים לשרת ומבקשים ממנו שירות או מידע, למשל דפדפן שמבקש דף אינטרנט.
פונקציה - קטע קוד בעל שם שמבצע משימה מוגדרת, מקבל ערכי קלט (פרמטרים) ויכול להחזיר תוצאה. מאפשרת לארגן קוד ולהשתמש בו שוב.
שירות - תוכנה שרצה ברקע ומספקת פונקציונליות לרכיבים אחרים, לרוב ללא ממשק משתמש, ומופעלת אוטומטית עם המערכת.
דיבאג - תהליך של איתור, הבנה ותיקון תקלות בקוד, לעיתים בעזרת כלי שמאפשר לעצור ולעקוב אחר ריצת התוכנית.
בנאי - מתודה מיוחדת שמופעלת אוטומטית בעת יצירת אובייקט ממחלקה, ומאתחלת את ערכיו ההתחלתיים.
אובייקט - יחידה בתכנות מונחה עצמים שמאגדת נתונים (תכונות) ופעולות (מתודות). נוצר בדרך כלל ממחלקה המשמשת כתבנית.
מחרוזת - סוג נתונים שמייצג רצף של תווים, כלומר טקסט, ומשמש לאחסון מילים, משפטים או כל רצף סימנים.

Untyped Faults
כשהשרת זורק חריגה, הלקוח לא מקבל אותה כחריגה המקורית. בשיעור רואים איך מטפלים בזה, ואילו שיטות קיימות לזרוק חריגה ללקוח.
הדוגמה: חלוקה באפס
הפונקציה Division מקבלת שני מספרים. בשרת בודקים אם המספר השני הוא אפס, ואם כן זורקים ArgumentException עם הודעה מתאימה.
טיפול בצד הלקוח
1. Include Exception Details in Faults: בהגדרות השירות (Advanced, Service Debug) מסמנים True. בלי זה פרטי החריגה לא מגיעים ללקוח.
2. למה ArgumentException לא נתפס: WCF עוטף את החריגה ב-FaultException, ולכן ה-catch של הלקוח צריך לתפוס את FaultException.
3. ה-finally: את השירות סוגרים ב-finally, רק אם הוא לא null ורק אם המצב שלו אינו Faulted. אחרת Close נכשל אחרי fault.
ארבע שיטות לזרוק untyped fault
4. חריגה רגילה: זריקת ArgumentException. הלקוח מקבל FaultException עם ההודעה.
5. FaultException עם הודעה: זורקים new FaultException(...) עם אותה הודעה.
6. FaultException עם חריגה: מעבירים לבנאי אובייקט של DivideByZeroException. ההודעה לא מגיעה ללקוח, והוא מקבל את הודעת ברירת המחדל.
7. FaultException עם reason: מוסיפים לבנאי מחרוזת reason עם ex.Message. כך ההודעה מגיעה.
כל השיטות האלה נקראות untyped, כי הלקוח רואה רק FaultException כללי, ואינו יכול להבדיל בין סוגי החריגות. בשיעור הבא נראה איך לזרוק שגיאה מסוג ספציפי.
השיעור הבא בקורס: Typed Faults

פרקי ההרצאה: Untyped Faults

  1. 00:00

    טיפול בשגיאות: דיווח מהשרת ללקוח

  2. 01:01

    זריקת ArgumentException בחלוקה ב-0

  3. 01:50

    Include Exception Details ב-Service Debug

  4. 02:48

    תפיסת החריגה בצד הלקוח

  5. 04:04

    סגירת השירות ב-finally

תמלול ההרצאה: Untyped Faults

הטקסט המלא של הדקות הראשונות בהרצאה «Untyped Faults» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:20

    אנחנו מגיעים לנושא Error Handling, כלומר איך אנחנו יכולים לדווח על שגיאה מהסרוויס שנמצא בשרת לקליינט ואיך הקליינט יכול לתפוס אותה.

  2. 00:30

    אז בואו נסתכל עוד פעם על הקלקולטור שבנינו. אז יש לנו כאן את הפונקציה Division. פונקציה Division מקבלת שני מספרים ומחזירה את התוצאה של החלוקה. אז למרות שאנחנו יכולים לבצע חלוקה של 0 אם אנחנו מתעסקים עם Double, עדיין בוא נניח שאנחנו לא מאשרים את זה מאיזושהי סיבה, בשירות שלנו אז מה אנחנו יכולים לעשות בצד

  3. 00:58

    של השירות בצד של השירות אנחנו יכולים לעשות כמה דברים בשביל להעלות חריגה כמו שצריך בואו נראה את כל האופציות שעומדות ברשותנו אז ראשית אני יכול פשוט לבדוק האם num2 הוא 0 אם כן אני יכול לבצע throw של new לדוגמה argument exception נדליק את ה-namespace הרצוי וניתן הודעה מתאימה

  4. 01:33

    יש לנו פה message can't divide by 0, אוקיי אז מה שעשינו זה העלינו חריגה בשרת ועכשיו קודם כל אם אנחנו מתעסקים עם חריגות ואנחנו רוצים שהלקוח יקבל אותן אז חשוב ללכת ולאפשר לחריגות האלה להגיע ללקוח מהשרת.

  5. 02:00

    אז דבר ראשון מה שאנחנו צריכים לעשות זה ללכת ולהוסיף עוד behavior שאומר שהחריגות מהשרת יגיעו ללקוח ולצורך כך תמיד עדיף להשתמש באדיטור שראינו.

  6. 02:13

    אז בואו נפתח אותו, נסגור אותו ונפתח אותו שוב דרך AppConfig ונגדיר ב-Behaviour עוד אחת נוספת, יש לנו פה את Advanced Service Behaviours, נוסיף Service Debug ונבצע קונפיגורציה כך ש-Include Exception Details in Faults, True, נבצע Saving, אוקיי, נעדכן ונראה שזה התווסף

  7. 02:50

    לכאן, Service Debug, לוד אקספצ'ן דיטיילס אין פולטס שווה טרו פולט זה שגיאה המילה פולט זה שגיאה אוקיי עכשיו בואו נסתכל איך הדבר הזה מגיע ללקוח האם בצד הלקוח אנחנו יכולים לבצע קאץ' פשוט ולתפוס ארגומנט אקספצ'ן אז בואו נחזור ללקוח נציג את הקוד ונעטוף את הכל בטרייקאץ' נגדיר טרייקאץ' נכניס לקאץ' את כל

  8. 03:22

    הקוד ונתפוס ארגומנט אקספצ'ן e x ונציג מסג'בוקס ex-message נציג כאן איזשהו אירור נציג מסג'בוקס buttons אוקיי ואייקון אירור סבבה אם אנחנו משתמשים בtry catch יכול להיות שתהיה חריגה ואז אם החריגה מתבצעת היא תתבצע כאן בפונקציית add שמתבצעת בסרוויס ולכן אנחנו הולכים לדלג מעל המסג'בוקס של הצגת התוצאה כמובן אבל גם אנחנו הולכים לדלג מעל הservice.close

  9. 04:20

    לכן מה שחשוב לעשות זה לפתוח את הסרוויס מחוץ או יותר נכון לעשות את זה טיפה יותר מקצועי לבצע שהסרוויס שווה נל לפתוח אותו בתוך ה-try ובאזור של ה-finally אנחנו בכל מקרה רוצים לסגור אותו במידה ואכן הוא לא נל.

  10. 04:44

    אז נלך ל-finally במידה והסרוויס שונה מנל אנחנו רוצים לבצע service.close זאת השיטה היותר סטנדרטית לבצע את זה כי יכול להיות שאנחנו נגיע לאקספצ'ן ואנחנו לא נסגור את

לקורס המלא: קורס WCF אונליין בדוט-נט

ההרצאה הקודמת: Debug View

ההרצאה הבאה: Typed Faults

קורסים נוספים במסלול

  • קורס WinForms - תוכנות רגילות בווינדוס
  • פרויקט מעשי ב-#C - בונים מחשבון פשוט
  • פרויקט מעשי ב-#C - ספר טלפונים
  • פרויקט מעשי ב-#C - תוכנת צייר
  • קורס ADO.NET - חיבור אתר למסד נתונים
  • קורס תכנות מתקדם - #Advanced .NET C