DCSIMG
איך לאפשר את חווית ה Console גם ב WindowsService - Yitzhak Gootvilig's Blog

Yitzhak Gootvilig's Blog

איך לאפשר את חווית ה Console גם ב WindowsService

post זה הוא המשך של קודמו: תמיכה ב WindowsService בזמן פיתוח.

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

יתכן שמידע tracing זה, יהיה חשוב לנו גם בזמן שנריץ את הקוד כ WindowsService ולא רק בזמן ההרצה כ Console Application.

איך נדאג לכך?
ראשית, בזמן עבודה כ Service נצטרך להפרד מידידנו האהוב ה Console. אין שום דרך להציג אותו, הלא בחרנו ב service שאינו אינטראקטיבי.
במקום חלון ה console נוכל להסתפק בקובץ.
אם כך, במה זה שונה מ log? זה לא שונה, פרט להתנהגות אחת: זה אותו המידע שאנו מציגים בחלון ה Console בסביבת הפיתוח.

לשם כך, נשתמש ב Trace (מתוך System.Diagnostics) ולא ב Console.Write.
נדאג שהודעות ה Trace יוצגו הן בחלון ה Console והן בקובץ יעודי, בהתאם לסביבת הריצה.

בדוגמא הבאה, נציג את הקונפיגורציה של שני המצבים כאחד (אם כי בד"כ דרוש לנו רק אחת משתי האפשרויות):

   1: <system.diagnostics>
   2:     <trace autoflush="true" indentsize="4">
   3:       <listeners>
   4:          <add name="fileListener" type="System.Diagnostics.TextWriterTraceListener" 
   5:                                                 initializeData="c:\logs\tracing.log" /> 
   6:          <add name="consoleListener" type="System.Diagnostics.ConsoleTraceListener"/>
   7:       </listeners>
   8:     </trace>
   9:   </system.diagnostics>


TextWriterTraceListener – כשמו, רושם לתוך הקובץ המוגדר ב initializeData
ConsoleTraceListener – רושם את ההודעות לחלון ה Console.

כדי לתת ממשק זהה ונוח כמו של Console.Write הוספתי class שמבצע זאת. בנוסף, הוא גם מוסיף חתימה של זמן לכל הודעת Trace.

קטע דוגמא:

   1: public static class Tracing
   2: {
   3:     public static void WriteLine(string format, params object[] args)
   4:     {
   5:         TraceTimestamp();
   6:         Trace.WriteLine(string.Format(format, args));
   7:     }
   8:  
   9:     //More methods here      
  10:  
  11:     private static void TraceTimestamp()
  12:     {
  13:         Trace.Write(DateTime.Now.ToString("dd/MM/yyy hh:mm:ss.fff => "));
  14:     }
  15: }
  16:  

להורדת הקוד לכל הסדרה

ה post הבא בנושא: Self Installing WindowsService -שרות שיודע להתקין את עצמו

תוכן התגובה

?????????? ?? WindowsService ???????? ?????????? - Yitzhak Gootvilig's Blog כתב/ה:

Pingback from  ?????????? ?? WindowsService ???????? ?????????? - Yitzhak Gootvilig&#39;s Blog

# June 21, 2010 10:40 PM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 4 and 5 and type the answer here:


Enter the numbers above: