
ArgumentException עם הודעה מתאימה.FaultException, ולכן ה-catch של הלקוח צריך לתפוס את FaultException.Close נכשל אחרי fault.ArgumentException. הלקוח מקבל FaultException עם ההודעה.new FaultException(...) עם אותה הודעה.DivideByZeroException. ההודעה לא מגיעה ללקוח, והוא מקבל את הודעת ברירת המחדל.ex.Message. כך ההודעה מגיעה.הטקסט המלא של הדקות הראשונות בהרצאה «Untyped Faults» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אנחנו מגיעים לנושא Error Handling, כלומר איך אנחנו יכולים לדווח על שגיאה מהסרוויס שנמצא בשרת לקליינט ואיך הקליינט יכול לתפוס אותה.
אז בואו נסתכל עוד פעם על הקלקולטור שבנינו. אז יש לנו כאן את הפונקציה Division. פונקציה Division מקבלת שני מספרים ומחזירה את התוצאה של החלוקה. אז למרות שאנחנו יכולים לבצע חלוקה של 0 אם אנחנו מתעסקים עם Double, עדיין בוא נניח שאנחנו לא מאשרים את זה מאיזושהי סיבה, בשירות שלנו אז מה אנחנו יכולים לעשות בצד
של השירות בצד של השירות אנחנו יכולים לעשות כמה דברים בשביל להעלות חריגה כמו שצריך בואו נראה את כל האופציות שעומדות ברשותנו אז ראשית אני יכול פשוט לבדוק האם num2 הוא 0 אם כן אני יכול לבצע throw של new לדוגמה argument exception נדליק את ה-namespace הרצוי וניתן הודעה מתאימה
יש לנו פה message can't divide by 0, אוקיי אז מה שעשינו זה העלינו חריגה בשרת ועכשיו קודם כל אם אנחנו מתעסקים עם חריגות ואנחנו רוצים שהלקוח יקבל אותן אז חשוב ללכת ולאפשר לחריגות האלה להגיע ללקוח מהשרת.
אז דבר ראשון מה שאנחנו צריכים לעשות זה ללכת ולהוסיף עוד behavior שאומר שהחריגות מהשרת יגיעו ללקוח ולצורך כך תמיד עדיף להשתמש באדיטור שראינו.
אז בואו נפתח אותו, נסגור אותו ונפתח אותו שוב דרך AppConfig ונגדיר ב-Behaviour עוד אחת נוספת, יש לנו פה את Advanced Service Behaviours, נוסיף Service Debug ונבצע קונפיגורציה כך ש-Include Exception Details in Faults, True, נבצע Saving, אוקיי, נעדכן ונראה שזה התווסף
לכאן, Service Debug, לוד אקספצ'ן דיטיילס אין פולטס שווה טרו פולט זה שגיאה המילה פולט זה שגיאה אוקיי עכשיו בואו נסתכל איך הדבר הזה מגיע ללקוח האם בצד הלקוח אנחנו יכולים לבצע קאץ' פשוט ולתפוס ארגומנט אקספצ'ן אז בואו נחזור ללקוח נציג את הקוד ונעטוף את הכל בטרייקאץ' נגדיר טרייקאץ' נכניס לקאץ' את כל
הקוד ונתפוס ארגומנט אקספצ'ן e x ונציג מסג'בוקס ex-message נציג כאן איזשהו אירור נציג מסג'בוקס buttons אוקיי ואייקון אירור סבבה אם אנחנו משתמשים בtry catch יכול להיות שתהיה חריגה ואז אם החריגה מתבצעת היא תתבצע כאן בפונקציית add שמתבצעת בסרוויס ולכן אנחנו הולכים לדלג מעל המסג'בוקס של הצגת התוצאה כמובן אבל גם אנחנו הולכים לדלג מעל הservice.close
לכן מה שחשוב לעשות זה לפתוח את הסרוויס מחוץ או יותר נכון לעשות את זה טיפה יותר מקצועי לבצע שהסרוויס שווה נל לפתוח אותו בתוך ה-try ובאזור של ה-finally אנחנו בכל מקרה רוצים לסגור אותו במידה ואכן הוא לא נל.
אז נלך ל-finally במידה והסרוויס שונה מנל אנחנו רוצים לבצע service.close זאת השיטה היותר סטנדרטית לבצע את זה כי יכול להיות שאנחנו נגיע לאקספצ'ן ואנחנו לא נסגור את