PracticU

Performance - MTOM

בלי כתוביותעם כתוביות
PracticU › קורס WCF - תקשורת למתקדמים בדוט-נט › Performance - MTOM
מילון מושגים:
בינארי - ייצוג מידע בבסיס 2 בעזרת הספרות 0 ו-1. גם קובץ הכולל קוד מכונה ולא טקסט קריא.
ספרייה - אוסף קוד מוכן, כמו פונקציות ומחלקות, שמפתחים משתמשים בו בתוכניותיהם במקום לכתוב הכול מחדש.
תמונה - קובץ גרפי המוצג על המסך. בהקשר של וירטואליזציה או Docker, תבנית מוכנה שממנה יוצרים מכונה או קונטיינר.
מערך - מבנה נתונים שמאחסן אוסף ערכים מאותו סוג ברצף, שאפשר לגשת אליהם לפי מספר מיקום (אינדקס).
דיבאג - תהליך של איתור, הבנה ותיקון תקלות בקוד, לעיתים בעזרת כלי שמאפשר לעצור ולעקוב אחר ריצת התוכנית.
טופס - אזור בממשק שבו המשתמש מזין נתונים בשדות ושולח אותם, למשל טופס הרשמה או התחברות.
פרוקסי - שרת מתווך שמעביר בקשות בין לקוח ליעד, ויכול לשמש להסתרה, לסינון, למטמון או לבקרת גישה.
בנאי - מתודה מיוחדת שמופעלת אוטומטית בעת יצירת אובייקט ממחלקה, ומאתחלת את ערכיו ההתחלתיים.

Performance - MTOM
כשמעבירים תמונות בין שרת ללקוח, ביצועים טובים דורשים להעביר את המידע הבינארי בדרך יעילה. בשיעור בונים שירות חדש שמציג תמונות, ומשתמשים ב-MTOM כדי להעביר אותן.
השירות
1. ספרייה חדשה: מוסיפים ל-Solution ספריית Class Library בשם Image Manager Library. בה הממשק IImagesManager עם שתי פונקציות: GetImagesNames, שמחזירה מערך מחרוזות, ו-GetImage(string), שמחזירה מערך בתים.
2. סימון: משתמשים ב-System.ServiceModel ומוסיפים ServiceContract לממשק ו-OperationContract לכל פונקציה.
3. המימוש: המחלקה ImagesManager קוראת את תיקיית Images בעזרת Application.StartupPath (נדרשת הפניה ל-System.Windows.Forms). מסננים רק את שמות הקבצים, בלי הנתיב המלא.
4. התיקייה: בזמן דיבוג תיקיית bin\Debug נמחקת בכל בנייה, ולכן התמונות שומרים בתיקיית הפרויקט של ההוסט.
ההוסט
5. הרצה: ההוסט הוא אפליקציית Console. מוסיפים אליו הפניה לספרייה ויוצרים את השירות ב-WCF Configuration Editor.
6. Behavior ו-Binding: מוסיפים Service Metadata כדי לחשוף את ה-WSDL. ב-Binding בוחרים BasicHttpBinding עם MaxBufferSize ו-MaxReceivedMessageSize בערך חמישה מיליון בתים, ומגדירים את MessageEncoding ל-Mtom. TransferMode נשאר Buffered, כי התמונה נשלחת כולה.
הלקוח
7. טופס: ComboBox לבחירת שם התמונה, מוגדר כ-DropDownList כדי שלא יוכלו לכתוב בו, ו-PictureBox להצגה.
8. שירות אחד: הפרוקסי נוצר פעם אחת ומשמש לכל ההורדות. בסגירת הטופס קוראים ל-Close.
9. מילוי הרשימה: בבנאי הטופס מוסיפים את השמות לרשימה ובוחרים את הראשון.
10. הצגה: בבחירה משתנה התוכן מבקשים את הבתים, שומרים אותם בזיכרון ומציגים בתמונה.
תקלות שנפתרו
11. תיקייה חסרה: השירות זרק שגיאה כי תיקיית Images לא הייתה קיימת. הפתרון: יצירת התיקייה והעתקת התמונות אליה.
12. גבול המערך: הלקוח קיבל שגיאה על maximum array length quota 16384. מגדילים את MaxArrayLength ואת הבאפרים בקובץ app.config של הלקוח לחמישה מיליון.
13. נעילת קובץ: השמירה לקובץ ואז הטעינה ממנו יצרו שגיאת "process cannot access file". הפתרון: הטעינה נעשית מזיכרון (MemoryStream), בלי לשמור את התמונה לדיסק.
כך מעבירים תמונות ביעילות, ומשם אפשר לעבור להעברת וידאו בסטרימינג.
השיעור הבא בקורס: Streaming

פרקי ההרצאה: Performance - MTOM

  1. 00:00

    העברת תמונות בשירות WCF

  2. 01:17

    ממשק Images Manager ופונקציותיו

  3. 02:50

    מימוש המחלקה Images Manager

  4. 03:29

    שליפת שמות הקבצים מתיקיית הפרויקט

  5. 04:54

    שמירת שמות הקבצים בלבד ללקוח

  6. 06:22

    תיקיית images בשרת

תמלול ההרצאה: Performance - MTOM

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

  1. 00:19

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

  2. 00:35

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

  3. 00:50

    Add New Project. נבחר ב-Class Library. אנחנו רואים שהוא נמצא בתוך הסלושן ונקרא לו image manager library. נבצע אוקיי ועכשיו אנחנו רוצים לבנות את האינטרפייס ואת המחלקה שבו.

  4. 01:17

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

  5. 01:41

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

  6. 01:51

    פונקציה שנייה תביא לו פיזית את התמונה. אז הפונקציה הראשונה מחזירה לנו מערך של סטרינגים get images names בעצם למה אני פותח סוגריים וסוגר הרי זה אינטרפייס והפונקציה השנייה ממש תחזיר לנו את התמונה שנבחר.

  7. 02:15

    אז יש לנו פה מערך בתים getImage שמקבלת String image name. אוקיי, אז אלה בעצם הפונקציות שאנחנו רוצים.

  8. 02:32

    כל מה שנשאר לנו לעשות קודם כל בעבור ה-interface הזה זה לצרף DLL שהוא System Service Model בכדי להגדיר את האטריביוטס המתאימים. יש לנו פה Service Contract ויש לנו Operation Contract.

  9. 02:58

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

  10. 03:14

    Images Manager. ניגש למחלקה ונממש את הממשק i Images Manager. אז הפונקציה שמחזירה לנו את כל השמות של התמונות, מה שאנחנו רוצים לעשות זה Return Directory Get Files ובואו נביא את כל התמונות שנמצאות בתיקייה של הפרויקט.

  11. 03:46

    אז לצורך כך נצרף עוד משהו ל-DLL מבחינת ה-References, וה-Reference שנצרף זה System Windows Forms. בואו נצרף אותו, ואז יהיה לנו את Application.StartupPath.

  12. 04:08

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

  13. 04:26

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

  14. 04:36

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

  15. 05:17

    בואו נגדיר את זה כ-full path files ו-can only file names New String בגודל FullPathFile.Length ונרוץ ונשלוף את השמות של התמונות בלבד. אז נרוץ ב-4 על FullPathFile.Length ומה שנעשה זה פשוט ניקח פייל אינפו על כל אחד מהם.

  16. 05:59

    FullPathFiles על i ואז FileNames על i יהיה שווה רק ל-FI.Name לבסוף נחזיר את FileNames. אז בעצם מה שיש לנו כאן זאת פונקציה שאם קוראים לה היא לוקחת את כל הקבצים שנמצאים באיזושהי תקייה האמת שזה לא התקייה שאנחנו צריכים ללכת אנחנו צריכים ללכת לאיזושהי תקיית images אז בואו נגדיר כאן images אנחנו צריכים לגשת

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

ההרצאה הקודמת: Typed Faults

ההרצאה הבאה: Streaming

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

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