RESTful API with ASP.NET Web API 2

סיכום על כתיבת Controller שמגיב לבקשות HTTP.

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

ניצור פרויקט ASP.NET Web Apllication ריק, על מנת שנבין כל שלב בעצמנו.

הבדלים בין Web API 2 לבין MVC Controller

נוסיף לפרויקט תיקייה בשם Controllers (לא חובה דווקא בשם הזה). נוסיף לתיקייה Controller, וייפתח לנו החלון הבא שידרוש מאיתנו לבחור Controller:

Select Controller

אנחנו רואים 2 סוגים של Controllers. אני לא יודע להרחיב לעומק, אבל MVC Controller מתאים יותר למודל MVC שכולל גם View, ומאיתנו לא נדרש View, כי אנחנו רוצים לשלוח נתונים בלבד. אפשר להשתמש ב2 הControllers ל2 המטרות (שליחת נתונים והצגת View), אבל לטובת לימוד של כתיבת RESTful נשתמש בWeb API 2 כדי להבין טוב יותר את הפעולות שאנחנו עושים.

אחרי שנוסיף את Web API Controller – Empty (נבחר ריק- שוב, כדי ללמוד) נכתוב את השם שלו בתיבה שקפצה. השם שלו יהיה מורכב משם הController- הנתונים שנרצה להביא, וסיומת Controller. בדוגמא שלנו נבחר בשם UsersController.

אחרי שלחצנו אישור, Visual Sudio יוסיף כמה קבצים (במידה וזאת הפעם הראשונה שאנחנו מוסיפים Controller).

בקשות HTTP:

בקשות http אלו הבקשות הרגילות שאנחנו משתמשים בהם בגלישה באינטרנט, והם מבוססות על שורת הכתובת. ישנם 4 בקשות http עיקריות:

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

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

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

DELETE- דומה לבקשת GET. מורכבת מכתובת בלבד ומבקשת מהשרת למחוק אובייקט כלשהו.

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

הController:

כמו שראינו, שם הController הוא שם האובייקט שאיתו נתעסק, עם סיומת controller (אצלנו: UsersController), והוא יורש מapiController, בשונה מMVC Controller שיורש מController. מלבד זאת, אין לנו כרגע פונקציות בקובץ.

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

הגישה לController נעשית באמצעות הכתובות:

/api/{Controller} - /api/Users
 /api/{Controller}/{id} - /api/Users/5

תגובה לבקשות HTTP:

ונוכל בהתאמה ליצור פונקציות שיגיבו לארבעת בקשות הHTTP. כדי שפונקצייה תגיב לבקשה מסוימת, השם שלה צריך להתחיל בשם הבקשה, לדוגמא: GetAll, PostOne, DeleteByID, Put. הController יודע להתאים את סוג הבקשה לפונקצייה המתאימה.

שליחת נתונים באמצעות תבנית:

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

public string GetAll(){} //path: /api/Users
public string GetByID(int id){} //path: /api/Users/3, and id=3

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

שליחת נתונים בעזרת מחרוזת שאילתא:

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

http://www.google.com?search=HelloWorld&type=photos

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

public GetByName(string name){} // path: /api/Users?name=Baruch
public Get(int id, string name){} // path: /api/Users/5?name=Baruch

במידה והController לא מוצא פונקצייה שמתאימה בדיוק לערכים שהוא קיבל, הוא ישתמש בפונקציית ברירת המחדל (ללא ערכים).

אני לא מרחיב יותר מידי, אפשר על פי הדברים האלו לעשות ניסויים- מה קורה אם משנים את סדר המשתנים? מה קורה אם שולחים את id כמחרוזת שאילתא? מה קורה אם בכתובת כותבים את id כstring?

ניתוב (Routing)

עד עכשיו השתמשנו בכתובות ובערכי ברירת המחדל. עכשיו נראה איך אפשר לשנות את הכתובת שאליה הController מגיב.

שלבי הניתוב שאנחנו מכירים:

  1. הASP.NET לוקח מהכתובת של הבקשה את חלק ה{Controller}, מצמיד אותו למילה Controller ומחפש Controller בשם הזה.
  2. בתוך הController מחפש פונקצייה שמתחילה בשם הבקשה.
  3. לאחר שנמצאו הפונקציות המתאימות לבקשה, מנסה להתאים את רשימת המשתנים לפונקצייה.

נראה שאת חלק מהשלבים אפשר לשנות.

הניתוב  מתבצע ע"י טבלת ניתוב שמוגדרת בקובץ WebApiConfig.cs שנמצא בתיקיית App_Start, ונוצר אוטומטית בזמן שהוספנו את הController הראשון.

config.Routes.MapHttpRoute(
 name: "DefaultApi",
 routeTemplate: "api/{controller}/{id}",
 defaults: new { id = RouteParameter.Optional }
 );

זה הקוד. נעבור על שלושת הערכים שהוא מקבל:

  1. name: שם הניתוב, לא יודע עד כמה הוא משמעותי.
  2. routeTemplate: מגדיר את מבנה הכתובת. {Controller} הוא שומר מקום לשם הController, ובהמשך נראה שומרי מקום נוספים. שאר שומרי המקום הם לבחירתנו, והם השמות של המשתנים. גם עם זה ניתן לשחק ולראות מה קורה.
  3. default: כאן ניתן להגדיר האם יש פרמטרים שניתן להתעלם מהם. אם לא היינו מגדירים את id כאופציונלי, הכתובת ללא id לא הייתה חוקית, ולא הייתה מתקבלת.

שינויים אפשריים בכתיבת הפונקציות:

  • ניתן לכתוב פונקצייה ללא התחלה של שם הבקשה, ולשייך אותה בעזרת אפיון לפי הדוגמא:
    [HttpGet]
    public string GiveMe(int id){}
  • ניתן להוסיף פרמטר נוסף לכתובת הניתוב- {action}, וניתן להשתמש בו ב2 דרכים:
    • הaction בשורת הכתובת יפנה אותנו לשימוש בפונקצייה בעלת אותו שם:
      [HttpGet]
      public string Members(int id) //path: /api/{Controler}/{action}/{id}
    • ניתן להכריז על פונקצייה כמגיבה לפעולה זאת:
      [HttpGet]
      [ActionName("Members")]
      public string GiveMe()

זהו. זה היה הבסיס. במאמר הבא (אני מקווה) תהיה שיטה טובה יותר לניתוב, ובהמשך נדבר גם על יצירת בקשות וקבלת נתונים, ובסוף על בניית מאגר נתונים.

מדריך Windows Service בעברית- התקנה.

התקנה:   
בשונה מיישומים אחרים, ש Visual Studio מתקין אוטומטית, את השירות נצטרך להתקין בעצמנו.  
קודם כל, מומלץ ללחוץ על F6 כדי לבדוק אם קיימות שגיאות.  
נגיע חזרה לחלון האפור של TheService.cs, נלחץ לחיצה ימנית ונבחר "Add Installer". יתווסף לנו קובץ ProjectInstaller.cs ועוד כמה Reference.  
כנס לקובץ ProjectInstaller.cs, ולחץ על ServiceInstaller1. גש לטבלת המאפיינים, ושים לב-  
  • המאפיין DisplayName- המאפיין שיוצג בטבלת השירותים. (אני כתבתי "MyServiceInWindows"). 

  • המאפיין Description- כתיבת תיאור לשירות, בתור הסבר שיוצג עם השירות ברשימת השירותים של Windows. (אני כתבתי "My experimental service (description)" ).  

  • המאפיין StartType- תוכל לעיין בהקדמה למעלה כדי להיזכר בערכים שלו. 

עכשיו פתח את Visual Studio Command Prompt (אני הייתי צריך "לפתוח כמנהל", אחרת זה לא עבד..) הקלד שם "installutil -i" ואז את מיקום היישום- קובץ exe שבתיקייה "bin\Debug".  
שים לב ל2 ההודעות בסוף, אלו מאשרות את ההתקנה-
  • The Commit Phase completed successfuli.
  • The transacted install has completed.
אם סיימת עם זה- 
אולי תנסה להפעיל את שורת הפקודה של visual studio כמנהל, או שהשירות מותקן כבר (כך שתנסה להסיר אותו קודם, ראה בהמשך.) 
פתח את MMC (פשוט כתוב ב"הפעלה" (באנגלית "Run…") את הראשי תיבות MMC), קובץ, הוספה של יישום snap-in, והוסף מהרשימה את "שירותים". 
פתח את הרשימה ע"י דאבלקליק, וחפש את השירות שלך לפי השם שקראת לו במאפיין DisplayName בהתחלת חלק ההתקנה במדריך. 
אם במאפיין StartType בחרת  Manual, לחץ פעמיים על השירות כדי להפעיל אותו. שים לב לתיאור שמופיע. 
הוסף snap-in חדש, את "מציג האירועים", וחפש שם את השירות שלנו. 
להסרת השירות (בשביל לשנות קוד הנך חייב להסיר את השירות, לשמור את השינויים ולהתקינו מחדש) – 
אותה פקודה בדיוק, רק installutil -u. 
בקשה אישית- 
אם קראת את המדריך, ספר לי, שאני אדע שלא בזבזתי עליו זמן (לוקח זמן לכתוב מדריך מושקע..), וגם כי סתם אני נהנה להחליף דעות עם אנשים בנושאי תכנות למיניהם…. 
ברוך רוטקוף- [email protected] 

מדריך Windows Service בעברית- התקנה

התקנה:   
בשונה מיישומים אחרים, ש Visual Studio מתקין אוטומטית, את השירות נצטרך להתקין בעצמנו.  
קודם כל, מומלץ ללחוץ על F6 כדי לבדוק אם קיימות שגיאות.  
נגיע חזרה לחלון האפור של TheService.cs, נלחץ לחיצה ימנית ונבחר "Add Installer". יתווסף לנו קובץ ProjectInstaller.cs ועוד כמה Reference.  
כנס לקובץ ProjectInstaller.cs, ולחץ על ServiceInstaller1. גש לטבלת המאפיינים, ושים לב-  
  • המאפיין DisplayName- המאפיין שיוצג בטבלת השירותים. (אני כתבתי "MyServiceInWindows"). 

  • המאפיין Description- כתיבת תיאור לשירות, בתור הסבר שיוצג עם השירות ברשימת השירותים של Windows. (אני כתבתי "My experimental service (description)" ).  

  • המאפיין StartType- תוכל לעיין בהקדמה למעלה כדי להיזכר בערכים שלו. 

עכשיו פתח את Visual Studio Command Prompt (אני הייתי צריך "לפתוח כמנהל", אחרת זה לא עבד..) הקלד שם "installutil -i" ואז את מיקום היישום- קובץ exe שבתיקייה "binDebug".  
שים לב ל2 ההודעות בסוף, אלו מאשרות את ההתקנה-
  • The Commit Phase completed successfuli.
  • The transacted install has completed.
אם סיימת עם זה- 
אולי תנסה להפעיל את שורת הפקודה של visual studio כמנהל, או שהשירות מותקן כבר (כך שתנסה להסיר אותו קודם, ראה בהמשך.) 
פתח את MMC (פשוט כתוב ב"הפעלה" (באנגלית "Run…") את הראשי תיבות MMC), קובץ, הוספה של יישום snap-in, והוסף מהרשימה את "שירותים". 
פתח את הרשימה ע"י דאבלקליק, וחפש את השירות שלך לפי השם שקראת לו במאפיין DisplayName בהתחלת חלק ההתקנה במדריך. 
אם במאפיין StartType בחרת  Manual, לחץ פעמיים על השירות כדי להפעיל אותו. שים לב לתיאור שמופיע. 
הוסף snap-in חדש, את "מציג האירועים", וחפש שם את השירות שלנו. 
להסרת השירות (בשביל לשנות קוד הנך חייב להסיר את השירות, לשמור את השינויים ולהתקינו מחדש) – 
אותה פקודה בדיוק, רק installutil -u. 
בקשה אישית- 
אם קראת את המדריך, ספר לי, שאני אדע שלא בזבזתי עליו זמן (לוקח זמן לכתוב מדריך מושקע..), וגם כי סתם אני נהנה להחליף דעות עם אנשים בנושאי תכנות למיניהם…. 
ברוך רוטקוף- [email protected] 

מדריך Windows Service בעברית- כתיבה.

מתחילים! 
נפתח את visual studio ונבחר New Project>Visual C#>Windows>Windows Service וניתן לו את השם "TheWindowsServiceProject". לחץ OK. 
יצירת פרויקט
נוצרו לנו 2 קבצים- Program.cs, ו Service1.cs. 
נפתח את Program.cs, בו נמצאת פעולת ה Main שפועלת ראשונה בפרויקט. שים לב לקוד. בקוד נוצר מערך מסוג ServiceBase, ומאותחל עם אובייקט אחד מסוג Service1 (שזה בעצם השירות שלנו!) לאחר מכן  ע"י הפעולה הסטטית ServiceBase.Run, מופעלים כל השירותים. (אתה מבין בעצם שתוכל להוסיף עוד שירות, ולהוסיף אותו במערך..) 
static void Main() 
{ 
ServiceBase[] ServicesToRun; 
ServicesToRun = new ServiceBase[]  
 
new Service1()  
}; 
ServiceBase.Run(ServicesToRun); 
} 
כעת נשנה את שם השירות, כדי שנזכור את ההתייחסות אליו. לחץ על השירות (Service1.cs) ב"סייר הפתרון" (אל תשאל אותי למה קוראים לזה ככה..) והחלף את שמו ל"TheService". בתיבת הדו שיח שתופיע, ותשאל אם לשנות את כל ההניות לאותו שם, בחר כמובן OK. תוכל לראות שאכן שם השירות השתנה גם בקובץ Program.cs. 
חשוב לציין שהפעולה Run מפעילה את השירות בתהליך משלו, ועוברת לשורה הבאה. במקרה שלנו, תוכנת בקרה מפעילה את השירות, ואם תוסיף הרבה קוד לפני פעולת Run התוכנה מוגבלת לזמן כלשהו עד הפעלת השירות, ובמקרה כזה היא תעצור לפני הגעת השירות. 
מאפייני השירות: 
פתח את TheService.cs, ויופיע לך חלון אפור. לחץ עליו ותגש לטבלת המאפיינים (Properties). 
  • ServiceName- שם השירות, נכתוב שם "MyServiceRunning". שם השירות זה השם שיופיע בטבלת השירותים של Windows. שים לב! חשוב לשנות את השם בכל יצירת Windows Service, משום שהשארת 2 שירותים עם אותו שם תגרום להם להתנגש. 

  • AutoLog- כאשר מוגדר כ True (ברירת מחדל), השירות יטפל בשבילך בהודעות עבור התחלה, הפסקה וכו'. מומלץ להשאיר כך, כדי לא לקבל מידע רב מידי. 

  • מאפייני Can- כשתגדיר מאפיין כזה כTrue, תצטרך להוסיף שיטה שתגיף לאירוע שהמאפיין מוגד עבורו. 

קוד:  
לחץ פעמיים על השטח האפור שבשירות, ותקבל את מחלקת השירות. שים לב ל2 פעולות- OnStart ו OnStop. די מובן שהם פועלות בהתחלה ובעצירה, בהתאמה.. שים לב שהמחלקה יורשת מ ServiceBase, שמחייבת ליישם את 2 השיטות האלה… 
כעת נוסיף קוד. נבצע כתיבה ליומן האירועים כל דקה. מומלץ להסתכל בפרטי המחלקה EventLog לפני ותוך כדי. 
  1. ייבא את מרחב השמות System.Timers ע"י הוספת משפט using לאיזור הusingים. 

  2. הצהר על אובייקט מסוג Timer בשם timer1, ואתחל אותו בפונקצייה הבונה של השירות, תן לו לפעול כל דקה. (6000 אלפית שנייה). 

  3. הוסף לאירוע Elapsed שלו את הפונקצייה timer1_Elapsed. 

  4. במתודות OnStart ו OnStop הפעל את הפונקציות Start ו Stop של הטיימר. 

  5. שים את הקוד הזה במתודה timer1_Elapsed- 

string message = "My Service: " 
+ DateTime.Now.ToShortDateString() + " " 
+ DateTime.Now.ToShortTimeString(); 
this.EventLog.WriteEntry(message,EventLogEntryType.Information); 
הקוד שלי נראה כך: 
קוד סופי
האובייקט EventLog: 
האובייקט שייך למחלקה EventLog. תפקיד המחלקה הוא לרשום הודעות ביומן האירועים. 
כתבנו הודעה, ושלחנו אותה. שים לב להדרת סוג ההודעה. 

מדריך Windows Service בעברית- כתיבה

מתחילים! 
נפתח את visual studio ונבחר New Project>Visual C#>Windows>Windows Service וניתן לו את השם "TheWindowsServiceProject". לחץ OK. 
יצירת פרויקט
נוצרו לנו 2 קבצים- Program.cs, ו Service1.cs. 
נפתח את Program.cs, בו נמצאת פעולת ה Main שפועלת ראשונה בפרויקט. שים לב לקוד. בקוד נוצר מערך מסוג ServiceBase, ומאותחל עם אובייקט אחד מסוג Service1 (שזה בעצם השירות שלנו!) לאחר מכן  ע"י הפעולה הסטטית ServiceBase.Run, מופעלים כל השירותים. (אתה מבין בעצם שתוכל להוסיף עוד שירות, ולהוסיף אותו במערך..) 
static void Main() 
{ 
ServiceBase[] ServicesToRun; 
ServicesToRun = new ServiceBase[]  
 
new Service1()  
}; 
ServiceBase.Run(ServicesToRun); 
} 
כעת נשנה את שם השירות, כדי שנזכור את ההתייחסות אליו. לחץ על השירות (Service1.cs) ב"סייר הפתרון" (אל תשאל אותי למה קוראים לזה ככה..) והחלף את שמו ל"TheService". בתיבת הדו שיח שתופיע, ותשאל אם לשנות את כל ההניות לאותו שם, בחר כמובן OK. תוכל לראות שאכן שם השירות השתנה גם בקובץ Program.cs. 
חשוב לציין שהפעולה Run מפעילה את השירות בתהליך משלו, ועוברת לשורה הבאה. במקרה שלנו, תוכנת בקרה מפעילה את השירות, ואם תוסיף הרבה קוד לפני פעולת Run התוכנה מוגבלת לזמן כלשהו עד הפעלת השירות, ובמקרה כזה היא תעצור לפני הגעת השירות. 
מאפייני השירות: 
פתח את TheService.cs, ויופיע לך חלון אפור. לחץ עליו ותגש לטבלת המאפיינים (Properties). 
  • ServiceName- שם השירות, נכתוב שם "MyServiceRunning". שם השירות זה השם שיופיע בטבלת השירותים של Windows. שים לב! חשוב לשנות את השם בכל יצירת Windows Service, משום שהשארת 2 שירותים עם אותו שם תגרום להם להתנגש. 
  • AutoLog- כאשר מוגדר כ True (ברירת מחדל), השירות יטפל בשבילך בהודעות עבור התחלה, הפסקה וכו'. מומלץ להשאיר כך, כדי לא לקבל מידע רב מידי. 
  • מאפייני Can- כשתגדיר מאפיין כזה כTrue, תצטרך להוסיף שיטה שתגיף לאירוע שהמאפיין מוגד עבורו. 
קוד:  
לחץ פעמיים על השטח האפור שבשירות, ותקבל את מחלקת השירות. שים לב ל2 פעולות- OnStart ו OnStop. די מובן שהם פועלות בהתחלה ובעצירה, בהתאמה.. שים לב שהמחלקה יורשת מ ServiceBase, שמחייבת ליישם את 2 השיטות האלה… 
כעת נוסיף קוד. נבצע כתיבה ליומן האירועים כל דקה. מומלץ להסתכל בפרטי המחלקה EventLog לפני ותוך כדי. 
  1. ייבא את מרחב השמות System.Timers ע"י הוספת משפט using לאיזור הusingים. 
  2. הצהר על אובייקט מסוג Timer בשם timer1, ואתחל אותו בפונקצייה הבונה של השירות, תן לו לפעול כל דקה. (6000 אלפית שנייה). 
  3. הוסף לאירוע Elapsed שלו את הפונקצייה timer1_Elapsed. 
  4. במתודות OnStart ו OnStop הפעל את הפונקציות Start ו Stop של הטיימר. 
  5. שים את הקוד הזה במתודה timer1_Elapsed- 

string message = "My Service: " 
+ DateTime.Now.ToShortDateString() + " " 
+ DateTime.Now.ToShortTimeString(); 
this.EventLog.WriteEntry(message,EventLogEntryType.Information); 
הקוד שלי נראה כך: 
קוד סופי
האובייקט EventLog: 
האובייקט שייך למחלקה EventLog. תפקיד המחלקה הוא לרשום הודעות ביומן האירועים. 
כתבנו הודעה, ושלחנו אותה. שים לב להדרת סוג ההודעה. 

מדריך Windows Service בעברית- הקדמה.

בס"ד 
כתיבה והתקנה של Windows Service 
תורגם מArcane Code  ע"י ברוך רוטקוף ([email protected]) 
שימוש ב Visual Studio 2010 
טוב, זה המדריך הראשון שלי, אז קבלו בהבנה, ואם יש הערות- אני אשמח לקבל!  
הערה: די בסוף כתיבת המדריך שמתי לב שלפרויקט קראתי ThaWindowsServiceProject (שים לב- a במקום e). מה שיכולתי לשנות, שיניתי.. אתה- תשתמש תמיד בe, גם אם בתמונה או בטקסט כתוב a.  


הקדמה: 
Windows Service- שירות של Windows. 
שירות זה סוג של תוכנה שפועלת ברקע, בלי תצוגה גרפית כלשהו. אם אתה צריך תוכנה שתפעל כל הזמן על שרת, מסוף, או שתפעל ברקע- תשתמש ב Windows Service. ההתקנה של השירות במערכת ההפעלה, תגרום להפעלתו כל הזמן, ביחד עם המערכת. 
לכן, שים לב- לשירות אין ממשק משתמש! בגלל שהשירות פועל ברקע, הודעות (MessageBox) טפסים (Forms) וכד'- אסורים. אם אתה צריך לכתוב הודעות, עליך להשתמש ב Event Logger. 
להתחלת השירות יש 3 אפשרויות. 
  1. ידני (Manual) ברירת מחדל- במצב הזה המשתמש או תוכנית חייבים להפעיל את השירות. 

  2. אוטומטי (Automatic)- כאן windows יהיה אחראי על השירות, ויתחיל אותו כש Windows עצמו מתחיל. 

  3. לא זמין (Disabled)- אף אחד לא יכול להתחיל את השירות, עד שתשנה לאחד מהערכים הקודמים. 

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

  • NetworkService- מתאים לשרת. מגביל את הגישה למשימות מאובטחות, אבל מאפשר התקשרות עם מחשבים אחרים. 

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

  • User (ברירת מחדל)- דורש שם משתמש וסיסמה, ונותן הרשאות של אותו משתמש. 

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

מדריך Windows Service בעברית- הקדמה

בס"ד 
כתיבה והתקנה של Windows Service 
תורגם מArcane Code  ע"י ברוך רוטקוף ([email protected]) 
שימוש ב Visual Studio 2010 
טוב, זה המדריך הראשון שלי, אז קבלו בהבנה, ואם יש הערות- אני אשמח לקבל!  
הערה: די בסוף כתיבת המדריך שמתי לב שלפרויקט קראתי ThaWindowsServiceProject (שים לב- a במקום e). מה שיכולתי לשנות, שיניתי.. אתה- תשתמש תמיד בe, גם אם בתמונה או בטקסט כתוב a.  


הקדמה: 
Windows Service- שירות של Windows. 
שירות זה סוג של תוכנה שפועלת ברקע, בלי תצוגה גרפית כלשהו. אם אתה צריך תוכנה שתפעל כל הזמן על שרת, מסוף, או שתפעל ברקע- תשתמש ב Windows Service. ההתקנה של השירות במערכת ההפעלה, תגרום להפעלתו כל הזמן, ביחד עם המערכת. 
לכן, שים לב- לשירות אין ממשק משתמש! בגלל שהשירות פועל ברקע, הודעות (MessageBox) טפסים (Forms) וכד'- אסורים. אם אתה צריך לכתוב הודעות, עליך להשתמש ב Event Logger. 
להתחלת השירות יש 3 אפשרויות. 
  1. ידני (Manual) ברירת מחדל- במצב הזה המשתמש או תוכנית חייבים להפעיל את השירות. 

  2. אוטומטי (Automatic)- כאן windows יהיה אחראי על השירות, ויתחיל אותו כש Windows עצמו מתחיל. 

  3. לא זמין (Disabled)- אף אחד לא יכול להתחיל את השירות, עד שתשנה לאחד מהערכים הקודמים. 

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

  • NetworkService- מתאים לשרת. מגביל את הגישה למשימות מאובטחות, אבל מאפשר התקשרות עם מחשבים אחרים. 

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

  • User (ברירת מחדל)- דורש שם משתמש וסיסמה, ונותן הרשאות של אותו משתמש. 

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