PracticU

Server Transaction

בלי כתוביותעם כתוביות
PracticU › קורס WCF - תקשורת למתקדמים בדוט-נט › Server Transaction
מילון מושגים:
מודל - רכיב שמייצג את הנתונים ואת הלוגיקה העסקית באפליקציה. גם ייצוג מופשט של מערכת או תהליך.
Northwind - מסד נתונים לדוגמה של מיקרוסופט, המדמה חברת מסחר ומשמש ללימוד ולהדגמת שאילתות SQL.
מסד נתונים - אוסף מאורגן של נתונים המאוחסן כך שאפשר לשמור, לחפש, לעדכן ולשלוף אותו ביעילות, לרוב באמצעות שפת שאילתות.
שירות - תוכנה שרצה ברקע ומספקת פונקציונליות לרכיבים אחרים, לרוב ללא ממשק משתמש, ומופעלת אוטומטית עם המערכת.
ממשק - נקודת מגע בין רכיבים: ממשק משתמש שבו אדם מפעיל תוכנה, או ממשק תכנותי שמגדיר אילו פעולות רכיב אחד חושף לאחר.
טבלה - מבנה במסד נתונים שמאחסן נתונים בשורות ועמודות. כל שורה היא רשומה וכל עמודה היא שדה.
LINQ - יכולת ב-.NET לכתוב שאילתות על אוספים ומקורות נתונים ישירות בתוך קוד C# בתחביר אחיד.
חריגה - מצב שגיאה שמתרחש בזמן ריצת התוכנית ומפסיק את המהלך הרגיל, אלא אם הקוד תופס ומטפל בו.

Server Transaction
טרנזקציה היא קבוצת פעולות שנחשבות כיחידה אחת: או שכולן מצליחות, או שאף אחת מהן לא נשמרת. בשיעור רואים טרנזקציה שמתחילה ונגמרת בצד השרת.
המודל: Northwind
1. מסד הנתונים: Northwind הוא מסד נתונים לדוגמה של מיקרוסופט, על חברה ליבוא וייצוא מוצרי מזון. בשירות מוגדר הממשק INorthwindService עם פונקציה אחת: DeleteOrder(int orderID).
2. הבעיה: כדי למחוק הזמנה צריך קודם למחוק את פרטיה מהטבלה Order Details, ורק אחר כך את ההזמנה מהטבלה Orders. הקשר בין הטבלאות לא מוחק אוטומטית.
3. LINQ to SQL: מוסיפים קובץ DBML (Link to SQL Classes) עם שתי הטבלאות, והמערכת יוצרת אובייקטים מתאימים.
הטרנזקציה
4. TransactionScope: מוסיפים הפניה ל-System.Transactions ופותחים using (TransactionScope ts = new TransactionScope()).
5. הפעולות: בתוך הבלוק: שליפת הפרטים של ההזמנה, DeleteAllOnSubmit, SubmitChanges, ואחר כך מחיקת ההזמנה עצמה.
6. Complete: רק בסוף קוראים ל-ts.Complete(). אם לא קוראים לו, בסיום הבלוק (Dispose) כל השינויים מבוטלים.
בדיקה
7. הדמיית כישלון: בהדגמה זורקים חריגה אחרי ה-SubmitChanges הראשון. הפרטים של הזמנה 10250 נשארים במסד הנתונים, כלומר ה-rollback עבד. בהרצה רגילה, הזמנה 10249 נמחקה במלואה.
הטרנזקציה בשרת מבטיחה שלא יישארו נתונים שנמחקו בחלקם.
השיעור הבא בקורס: Client Transaction

פרקי ההרצאה: Server Transaction

  1. 00:00

    מהי טרנזקציה ושני סוגיה ב-WCF

  2. 01:15

    הכרת שירות Northwind ומסד הנתונים שלו

  3. 01:51

    הגדרת ממשק השירות ופעולת Delete Order

  4. 02:53

    מימוש המחלקה Northwind Service

  5. 03:33

    בחינת מבנה הטבלאות Orders ו-Order Details

  6. 05:12

    יצירת מודל נתונים עם Link to SQL

  7. 06:19

    הוספת הטבלאות למודל ו-Rebuild

  8. 06:56

    בניית NorthwindDataContext לפעולת המחיקה

תמלול ההרצאה: Server Transaction

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

  1. 00:20

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

  2. 00:36

    זאת אומרת, אם אחת מהפעולות נכשלת, מבחינת המערכת כל הפעולות לא יצליחו להתבצע בפועל. אם כל התת-פעולות האלה יצליחו, אז רק באמת זה נחשב שכולם אכן יצליחו פיזית.

  3. 00:50

    לדוגמה, פעולות על מסד נתונים. כאשר אנחנו מתעסקים ב-WCF בטרנזקציות, יש לנו שני סוגים של טרנזקציות. יש לנו Server Transaction ויש לנו Client Transaction.

  4. 01:02

    Server Transaction זו טרנזקציה שמתבצעת בצד של השרת, מתחילה ונגמרת בצד של השרת. Client Transaction זו טרנזקציה שמתחילה ונגמרת בצד של הקליינט.

  5. 01:14

    בואו נראה קודם כל דוגמה ל-Server Transaction ואחר כך ל-Client Transaction. ויש לנו כאן DLL חדש שהוספתי, זה נקרא Northwind Service Library.

  6. 01:27

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

  7. 01:38

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

  8. 01:54

    ואנחנו פשוט רוצים לעשות אינטרפייס כללי שמתעסק בנורת'ווינד נקרא לו iNorthwindService תמחוק את זה. אורייט, נגדיר את האינטרפייס הזה כפאבליק ונבנה בתוך האינטרפייס הזה פונקציה אחת ויחידה שכל מה שהיא תעשה זה delete order ותקבל int order ID ותמחוק את ההזמנה.

  9. 02:25

    בואו נצרף כרגע את System.ServiceModel System.ServiceModel בכדי להגדיר את ההגדרות המתאימות מעל האינטרפייס. יש לנו פה Service Contract ויש לנו כאן את Operation Contract.

  10. 02:49

    ניפטר מכל מה שלא צריך וסיימנו להגדיר את האינטרפייס. כעת אנחנו עוברים לבנות את המחלקה. נצרף New Item, יש לנו קלאס. הקלאס תמיד רצוי לכתוב בדיוק כמו שם הממשק רק בלי ה-i, זאת אומרת שהקלאס נקראת Northwind Service.

  11. 03:19

    נבצע Add, נגדיר אותה כ-Public, נירש את i Northwind Service ונממש אותו. כעת אנחנו צריכים לראות איך בנוי מסד הנתונים בכדי להבין איך לכתוב את הפונקציה Delete Order.

  12. 03:41

    אז בואו ניגש למסד הנתונים, נתחבר אליו, ניגש למסד הנתונים Northwind. אנחנו פה נמצאים ב-SQL Server, Northwind, טייבלס ויש לנו את הטבלה Orders.

  13. 03:56

    אז אם אנחנו מסתכלים על הרשומות של הטבלה orders אנחנו רואים שלכל רשומה כל הזמנה יש order ID. בואו ניקח את 102.49. 102.49 זה הזמנה שביצע איזשהו לקוח שזה ה-ID שלו אבל אני לא יכול סתם כך ללכת ולמחוק את ההזמנה הזאת.

  14. 04:18

    מה שאני צריך לעשות זה לבצע קודם כל מחיקה של הפירוט של ההזמנה. נסתכל ונראה שיש כאן עוד טבלה שנקראת order details. בואו ניכנס אליה ונראה שעבור 102.49 יש שני מוצרים שונים שנקנו בהזמנה 102.49. בהזמנה 102.50 יש שלושה מוצרים שונים, אוקיי?

  15. 04:45

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

  16. 05:01

    אוקיי, אז יש לנו פה את הטבלת אורדר, יש לנו פה את ה-Order Details, ואנחנו יכולים לגשת ולבנות את המערכת שהולכת למחוק לנו הזמנה לפי קוד הזמנה שקיבלה.

  17. 05:12

    היא כמובן קודם כל תמחוק ב-Order Details ורק אחר כך ב-Orders. לצורך כך בואו נוסיף New Item ונתחבר על ידי Link to SQL, נאתר כאן את Link to SQL Classes, נקרא לקובץ Northwind, זהו קובץ DBML שמאפשר לי גישה למסד הנתונים וביצוע פעולות נגדיר את הסרבר אקספלורר, נמחק קונקשנים לא

  18. 05:48

    קשורים ונתחבר למסד הנתונים. אז אנחנו נמצאים ב-SQL סר... SQL אקספרס, נאתר כאן את נורת'ווינג, הנה הוא, נבדוק שאכן הקונקשן הצליח ונתחבר עם קונקשן של נורת'ווינג.

  19. 06:11

    כעת אנחנו יכולים לפתוח את הטבלאות ולהוסיף כרגע את הטבלאות הרצויות. אז אנחנו הולכים להתעסק כרגע עם אורדרס, ו-order details בואו נסמן אותם ופשוט נגרור אותם לאזור הלבן הזה.

  20. 06:29

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

  21. 06:57

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

  22. 07:11

    בואו בתוך הפונקציה deleteOrder נפתח NorthwindDataContext וראשית נאתר את ההזמנה שאנחנו צריכים למחוק מ-OrderDetails מהטבלה OrderDetails אז יש לנו פה var query שאני רוצה לשאול בשפת לינק language integrated query From Order Details OD in DC.OrderDetails

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

ההרצאה הקודמת: Security - Message Level

ההרצאה הבאה: Client Transaction

הרצאות קשורות מקורסים אחרים

  • מבוא לטרנזקציה - transaction
  • Client-Server Architecture - חלק 1
  • Linux Container on Server 2019
  • התקנת שרת 2016 Server

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

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