PracticU

Duplex - Server Side

בלי כתוביותעם כתוביות
PracticU › קורס WCF - תקשורת למתקדמים בדוט-נט › Duplex - Server Side
מילון מושגים:
לקוח - תוכנה או מחשב שפונים לשרת ומבקשים ממנו שירות או מידע, למשל דפדפן שמבקש דף אינטרנט.
ממשק - נקודת מגע בין רכיבים: ממשק משתמש שבו אדם מפעיל תוכנה, או ממשק תכנותי שמגדיר אילו פעולות רכיב אחד חושף לאחר.
Callback - פונקציה שמועברת כארגומנט לפונקציה אחרת כדי שתופעל מאוחר יותר, לרוב בסיום פעולה.
פרוקסי - שרת מתווך שמעביר בקשות בין לקוח ליעד, ויכול לשמש להסתרה, לסינון, למטמון או לבקרת גישה.
מחלקה - תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.
בנאי - מתודה מיוחדת שמופעלת אוטומטית בעת יצירת אובייקט ממחלקה, ומאתחלת את ערכיו ההתחלתיים.
HTTP - פרוטוקול להעברת דפי אינטרנט ונתונים בין דפדפן לשרת. הגרסה המאובטחת שלו היא HTTPS.
פורט - מספר שמזהה שירות או תהליך מסוים בתוך מחשב, ומאפשר לכוון תעבורת רשת ליעד הנכון. למשל פורט 80 ל-HTTP.

Duplex - Server Side
בדופלקס גם הלקוח קורא לשרת וגם השרת יכול לקרוא ללקוח מתי שהוא רוצה, בלי קשר לקריאה מסוימת של הלקוח. דוגמה מוכרת היא מערכת חיפוש שמודיעה ללקוח כשהיא מוצאת את מה שחיפש.
שינויים בצד השרת
1. כל הפונקציות one-way: בממשק הראשי כל הפונקציות מחזירות void ומסומנות IsOneWay = true. התשובה לא חוזרת דרך הפונקציה עצמה, אלא דרך קריאה מהשרת ללקוח.
2. ממשק callback: נוסף ממשק חדש, ICalculatorCallback, שהלקוח צריך לממש. הוא מכיל את הפונקציה GetResult שמקבלת את התוצאה. גם היא void ו-one-way.
3. חשיפת הממשק: בהגדרת ה-ServiceContract של הממשק הראשי מוסיפים CallbackContract = typeof(ICalculatorCallback). כך הלקוח מכיר את הממשק בפרוקסי.
4. המחלקה Calculator: נשמר שדה פרטי מטיפוס הממשק של הלקוח. בקונסטרקטור מקבלים את ערוץ החזרה בעזרת OperationContext.Current.GetCallbackChannel<ICalculatorCallback>(). הפונקציות (add, subtract וכו') מחשבות ואז שולחות את התוצאה דרך GetResult.
הביינדינג
5. החלפת הביינדינג: מכיוון שה-NetTcp לא מתאים לכאן, בונים את ההגדרה מחדש עם WSDualHttpBinding (Dual HTTP). השם Dual מזהה ביינדינג שתומך בדופלקס.
6. Host: הכתובת 127.0.0.1 ופורט 6065, עם Service Metadata מופעל, כדי שהלקוח יוכל לקבל את ה-WSDL.
הצעד הבא הוא בניית הלקוח שמממש את הממשק ומציג את התוצאות שהשרת שולח.
השיעור הבא בקורס: Duplex - Client Side

פרקי ההרצאה: Duplex - Server Side

  1. 00:00

    שיטה שלישית: Duplex

  2. 00:53

    מתי כדאי להשתמש בדופלקס

  3. 02:08

    הפיכת מחשבון לשירות דופלקס

  4. 03:16

    ממשק Callback שהשרת מפעיל

  5. 04:33

    מימוש הממשק בצד הלקוח

  6. 05:11

    הפונקציה GetResult שמחזירה את התשובה

תמלול ההרצאה: Duplex - Server Side

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

  1. 00:19

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

  2. 00:40

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

  3. 00:59

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

  4. 01:20

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

  5. 01:49

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

  6. 02:05

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

  7. 02:14

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

  8. 02:35

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

  9. 02:49

    בדופלקס כל הפונקציות הם one way אבל כלקולטור הוא לא one way כי אני קורא ל-add והיא מחזירה לי ערך או subtract והיא מחזירה לי ערך.

  10. 02:57

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

  11. 03:22

    עכשיו, איך השרת הולך לקרוא לפונקציה שנמצאת בלקוח? הרי ברור שהשרת לא מכיר בכלל את הלקוח, לא מכיר את הפונקציות שיש לו, לא מכיר את המחלקות שיש לו.

  12. 03:32

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

  13. 03:41

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

  14. 03:57

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

  15. 04:31

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

  16. 04:42

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

  17. 04:57

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

  18. 05:16

    אמרנו כל הפונקציות חייבות להיות is one way אז גם אותה נחזיר void ונקרא לה גט ריזולט שמקבלת דאבל ריזולט אז איך אנחנו

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

ההרצאה הקודמת: Pattern - One Way

ההרצאה הבאה: Duplex - Client Side

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

  • Client-Server Architecture - חלק 1
  • Linux Container on Server 2019
  • התקנת שרת 2016 Server
  • הקמת Server WEB בענן

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

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