PracticU

יצירת Service ב-Windows

בלי כתוביותעם כתוביות
PracticU › קורס WCF - תקשורת למתקדמים בדוט-נט › יצירת Service ב-Windows
מילון מושגים:
שירות - תוכנה שרצה ברקע ומספקת פונקציונליות לרכיבים אחרים, לרוב ללא ממשק משתמש, ומופעלת אוטומטית עם המערכת.
מחלקה - תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.
DLL - קובץ ספרייה ב-Windows המכיל קוד ופונקציות שתוכנות שונות יכולות לטעון ולהשתמש בהן במשותף.
תיקייה - מכל במערכת הקבצים שמשמש לארגון קבצים ותיקיות אחרות בתוך מבנה היררכי.
Visual Studio - סביבת פיתוח משולבת (IDE) של מיקרוסופט לכתיבה, ניפוי והרצה של קוד, בעיקר בשפות .NET.
נתיב - מחרוזת שמתארת את מיקומו של קובץ או תיקייה במערכת הקבצים, או כתובת של משאב בתוך אתר.
פרוקסי - שרת מתווך שמעביר בקשות בין לקוח ליעד, ויכול לשמש להסתרה, לסינון, למטמון או לבקרת גישה.

יצירת Service ב-Windows
השיעור מראה איך מריצים שירות WCF כ-Windows Service: שירות שרץ ברקע, נשאר פעיל גם בלי משתמש מחובר, ומתחיל לעבוד מעצמו כשהמחשב עולה.
למה Windows Service ולא קונסול
הוסט שהוא תוכנית רגילה, כמו קונסול, WinForms או WPF, דורש משתמש מחובר. אפשר לסגור אותו מ-Task Manager, והוא לא עולה מחדש אחרי הפעלה של המחשב. Windows Service רץ אוטומטית, לא מופיע בשום חלון מלבד Services, ואינו שייך למשתמש אחד.
בניית הפרויקט
1. יצירה: מוסיפים ל-Solution פרויקט מסוג Windows Service בשם Calculator Win Service. את הקובץ והמחלקה משנים לשם CalculatorService.
2. העברת הקוד: מעתיקים את ה-ServiceHost כשדה (data member), פותחים אותו ב-OnStart וסוגרים אותו ב-OnStop.
3. הפניות: מוסיפים את System.ServiceProcess, את System.ServiceModel ואת ה-DLL של השירות.
4. התקנה: מוסיפים Installer מתוך עיצוב המחלקה. ב-ServiceInstaller מגדירים שם שירות, Display name וסוג הפעלה Automatic. ב-ServiceProcessInstaller מגדירים את החשבון ל-LocalSystem, כדי שהשירות יהיה זמין לכל המשתמשים במחשב.
התקנה והפעלה
1. בונים את הפרויקט במצב Release, ומעתיקים את קובץ ה-EXE ואת ה-DLL לתיקייה קבועה. לא מומלץ להתקין בשורש C:. עדיף מקום כמו Program Files, שמערכת ההפעלה לא תחסום.
2. פותחים את Visual Studio Command Prompt ומריצים את installutil עם הנתיב המלא לקובץ ה-EXE של השירות.
3. פותחים את Services (services.msc), מוצאים את Calculator Service ולוחצים Start.
4. בצרכן מוחקים את הפרוקסי והחיבור הישנים, מוסיפים Service Reference לכתובת ה-WSDL, ומריצים. אין צורך להריץ את השירות בצד הצרכן, כי הוא כבר רץ.
הסרה
כדי להסיר את השירות מריצים installutil /u עם אותו נתיב. לאחר רענון חלון Services השירות נעלם.
השירות חשוף באופן קבוע, ואין לו חלון שאפשר לסגור בטעות.
השיעור הבא בקורס: אירוח service על שרת IIS

פרקי ההרצאה: יצירת Service ב-Windows

  1. 00:00

    מגבלות תוכנת קונסול ככלי הוסטינג

  2. 01:31

    פרויקט Windows Service חדש

  3. 02:48

    הפרדה בין מחלקת השירות ל-WCF

  4. 03:45

    העברת ה-Service Host לשירות Windows

  5. 05:17

    הפעלה ועצירה ב-OnStart ו-OnStop

  6. 06:13

    הגדרת Service Installer ושם השירות

  7. 07:22

    הגדרת חשבון Local System להתקנה

תמלול ההרצאה: יצירת Service ב-Windows

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

  1. 00:20

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

  2. 00:50

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

  3. 01:14

    בתס מנג'ר וזה הדבר הנכון להריץ סרוויס שלנו כאשר אנחנו לא רוצים להשתמש ב-IS אלא באיזושהי תוכנה שנמצאת במחשב ומריצה אותה.

  4. 01:25

    אז דבר ראשון מה שנעשה זה נלך ל-Solution ונוסיף פרויקט חדש. אז נלך ל-Solution, Add New Project והפרויקט שאני בוחר הוא בקטגוריית Windows, אני בוחר Windows Service.

  5. 01:42

    אוקיי, בואו ניתן לו שם והשם שניתן לו זה יהיה Calculator Win Service. וזה בעצם השם של הפרויקט שאני מוסיף.

  6. 01:59

    ואני מבצע אוקיי והתווסף לי לסלושן פרויקט שהוא פרויקט של Windows Service. דבר ראשון מה שאנחנו עושים אנחנו משנים את השם של הקובץ שהוא הקובץ שרץ ב-Windows Service.

  7. 02:16

    אני רואה שאוטומטית השם הזה זה Service 1 אז בואו נשנה אותו ל-Calculator Service. שוב חשוב ששמות של מחלקות יהיו שונים משמות של מרחבי שמות בכדי שלא תהיה התנגשות ביניהם.

  8. 02:33

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

  9. 02:42

    מקש ימני על הדיזיינר view code ואני רואה שיש לי פה מחלקה שנקראת כלקולטור סרוויס עכשיו חשוב להבין המחלקה הזאת זה לא ה-WCF סרוויס שלנו שהוא נמצא ב-DLL כלקולטור ליבררי והמחלקה של ה-WCF סרוויס נקראת כלקולטור והקונטרקט שלה כלומר האינטרפייס נקרא i-כלקולטור.

  10. 03:07

    המחלקה Calculator Service שייכת ל-Windows Service והיא מייצגת את המחלקה שרצה ב-Windows Service. במחלקה הזאת אני רואה שיש לי שתי פונקציות On Start ו-On Stop.

  11. 03:21

    On Start מתבצעת כאשר הסרוויס מורץ. נניח כשהמחשב עולה והסרוויס אוטומטית עולה אז הוא רץ ואז On Start מתבצעת. On Stop מתבצעת כאשר הסרוויס יורד מהאוויר. אני מדבר על ה-Windows Service.

  12. 03:36

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

  13. 03:47

    יש לנו כאן את ה-service host, אני אעתיק אותו, אני אגש למחלקה של הווינדוס סרוויס ואני אדביק אותו פה כ-data member מפני שאני רוצה להגיע אליו גם ב-on-start וגם ב-on-stop בשביל לעצור אותו.

  14. 04:02

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

  15. 04:28

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

  16. 04:58

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

  17. 05:21

    אני אעתיק את זה, אחזור בחזרה ל-Windows Service ואני אדביק את זה ב-On-Start. מה אנחנו עושים ב-On-Stop? כמובן שב-On-Stop אנחנו צריכים ללכת ולבגור את הסרוויס, ואת זה כתבנו ב-Finallyly.

  18. 05:37

    אז נחזור בחזרה ונדביק ב-On-Stop את הקוד שסוגר את הסרוויס שלנו. בואו נגדיר את מרחבי השמות המתאימים. יש לנו את ה-Calculator, יש לנו את ה-Behavior, ואחרי שהגדרנו את הכל כמו שצריך, אז אני רואה למעלה, כמו תמיד, שיש לי המון מרחבי שמות שאני לא צריך אותם, Organize, Using, Remove and Sort,

  19. 06:01

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

  20. 06:25

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

  21. 06:35

    דבר ראשון, ה-Service Name. אנחנו קראנו לסרוויס שלנו Calculator Service. בואו נעתיק את זה. יש לנו פה את ה-Service Name Calculator Service, ויש לנו פה Display Name, כדי שנוכל לראות אותו אחר כך בחלון ה-Services.

  22. 06:53

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

  23. 07:08

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

  24. 07:19

    לאחר מכן יש לנו Service Process Installer, אנחנו בוחרים Properties ואנחנו משנים את Account מ-User, כי אנחנו לא רוצים שזה יהיה ספציפית לגבי יוזר מסוים ל-Local System, כי אנחנו רוצים שהוא יהיה עבור כל היוזרים במחשב.

  25. 07:37

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

  26. 07:56

    לפני זה אנחנו לא צריכים יותר את ה-Consol Host. לכן מה שנעשה, נפתח את התיקייה שלו, Open Containing Folder, אנחנו מגיעים לפרויקט עצמו של הקונסול הוסט.

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

ההרצאה הקודמת: הגדרת צרכן ל-Service

ההרצאה הבאה: אירוח service על שרת IIS

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

  • יצירת Service Class
  • יצירת RESTful Service מאפס
  • יצירת מחלקת Customers Service
  • התקנת דלת אחורית - Windows Service Backdoor

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

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