הדרכה ועזרה ביצירת C# - windows service

cd123

משתמש פעיל
D I G I T A L
שלום,

אני צריכה ליצור windows service
למעשה יש לי מכרז, אני רוצה לפתוח אותו למספר מסויים של שעות שבהן אני מאפשרת לתת הצעות מחיר וכו'
לאחר מכן אני רוצה לסגור את המכרז ולעשות כל מיני פעולות כמו שליחת מיילים סיכומים וכו'.
למישהו יש דוגמא דומה, או שהתעסק עם זה פעם שאוכל לשאול שאלות.
כמו כן, מישהו יודע מה היתרון של שימוש ב quartz.net בשביל לתזמן את הפונקציה?

תודה רבה,
חיה
 

Aharono

משתמש פעיל
D I G I T A L
רבותינו היו מגדירים כעין שאלה זו חסורי מחסרא....

את שואלת כאן שתי שאלות (יצירת windows service ופתיחת מכרז למס' שעות) רק לא כל כך הצלחתי להבין איך שתי השאלות מתחברות לבעיה אחת.. אם תוכלי בבקשה להרחיב שנוכל לעזור...

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

rivkic

App.Up.Go! -פיתוח תוכנות / אתרים מורכבים / קורסים
מנוי פרימיום
צילום מקצועי
D I G I T A L
תשאלי כאן את השאלות,
אשמח לעזור.
 

cd123

משתמש פעיל
D I G I T A L
טוב,
אני באמת לא טובה בניסוח ...
המכרז את זה אני יעשה לבד.. הרב כבר כתוב.
השאלה היא איך הכי טוב - עדיף אם יש למשהו דוגמא ליצור windows service ולא web service שירוץ ברקע ויאזין לבקשות
ושאלה נוספת היא איך הכי כדאי לתזמן את האזנה לבקשות לעוד שעתיים בתוך ה windows service האם דרך הספריה quartz.net של nuget או timer או אולי משהו אחר?
 

rivkic

App.Up.Go! -פיתוח תוכנות / אתרים מורכבים / קורסים
מנוי פרימיום
צילום מקצועי
D I G I T A L
איך את עושה את המכרז?
איך מתבצעות הקריאות?
אני מבינה שזה על שרת windows?
 

Aharono

משתמש פעיל
D I G I T A L
אני חושב שמה שאת רוצה לעשות הוא הרבה יותר פשוט ממה שאת חושבת....

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

PHP:
    public class Contract
    {
        public string Name { get; set; }

        public string Description { get; set; }

        public string Email { get; set; }
    }


    [Produces("application/json")]
    [Route("api/Example")]
    public class ExampleController : Controller
    {
        private DateTime            m_StartingTime;

        private DateTime            m_EndingTime;

        public ExampleController()
        {
            m_StartingTime = GetStartingTime();

            m_EndingTime = GetEndingTime();
        }

        private DateTime GetEndingTime()
        {
            throw new NotImplementedException();
        }

        private DateTime GetStartingTime()
        {
            throw new NotImplementedException();
        }

        [HttpPost]
        public ActionResult FileContract(Contract contract)
        {
            if (DateTime.Now > m_EndingTime)
            {
                return BadRequest("Contract has ended.");
            }

            if (DateTime.Now < m_StartingTime)
            {
                return BadRequest("Contract didn't start yet.");
            }

            // .....

            return Ok();
        }
    }


מה שנותר הוא רק להביא את זמני המכרז מאיפשהו ואז הקוד מאוד פשוט... ה web service רץ בשרת IIS פשוט והחיים טובים.... ובכל קריאה לשרת, נעשית בדיקה האם ניתן להרשם למכרז

* במידה ויש מס' של מכרזים, כמובן שהלקוח צריך לציין איזה ContractId הוא צריך להכניס (בעצם זה עוד property ב Contract) ואז במקום להשתמש ב StartingTime וב EndingTime, כדאי לגשת ל db ולהביא את המכרז המסוים שבו צריכים להיות שני שדות (StartingTime ו EndingTime) ולוודא שאכן הזמן הנוכחי הוא מתאים..


בהצלחה
 

cd123

משתמש פעיל
D I G I T A L
המכרז הוא ידני בדוט נט, לא איזה תוסף כלשהוא, ביצירה אני פותחת אותו למספר שעות מוגדר
ולאחר שמסתיים הזמן אני רוצה לעשות כל מיני פעולות
הקריאות מתבצעות מפרוייקט asp.net שרץ על אותו השרת.
וכן, השרת הוא windows
 

cd123

משתמש פעיל
D I G I T A L
מה שנותר הוא רק להביא את זמני המכרז מאיפשהו ואז הקוד מאוד פשוט... ה web service רץ בשרת IIS פשוט והחיים טובים.... ובכל קריאה לשרת, נעשית בדיקה האם ניתן להרשם למכרז
אם הבנתי נכון בדוגמא שהבאת זה רק מחזיר לי אם הזמן עבר או לא.
אני רוצה משהו שיקרה באופן אוטומטי כשהזמן מסתיים לא בקריאה כל-שהיא
 

Aharono

משתמש פעיל
D I G I T A L
אההההההההההה. שלום עליכם, עכשיו אנחנו מדברים....

במידה והמכרז הוא משהו קבוע (יומיומי וכיו"ב), עדיף להשתמש ב Windows Task Scheduler.

עקרונית זה עובד כך: יוצרים תוכנה נפרדת (console app הכי פשוט) שעושה את מה שצריך לעשות בסוף המכרז (לדוגמה, שליחת מיילים, עדכון ה db וכו' וכו') ואז מוסיפים את התוכנה ל WIndows Task Scheduler ע"י ה ScheduledTasks (אשמח להרחיב במידה וזה רלוונטי) ואז הווינדוס יריץ את התוכנה בשעה שהוגדרה לו

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

https://www.c-sharpcorner.com/article/task-scheduling-through-quartz-in-c-sharp/

בהצלחה
 

cd123

משתמש פעיל
D I G I T A L
אההההההההההה. שלום עליכם, עכשיו אנחנו מדברים....

במידה והמכרז הוא משהו קבוע (יומיומי וכיו"ב), עדיף להשתמש ב Windows Task Scheduler.

עקרונית זה עובד כך: יוצרים תוכנה נפרדת (console app הכי פשוט) שעושה את מה שצריך לעשות בסוף המכרז (לדוגמה, שליחת מיילים, עדכון ה db וכו' וכו') ואז מוסיפים את התוכנה ל WIndows Task Scheduler ע"י ה ScheduledTasks (אשמח להרחיב במידה וזה רלוונטי) ואז הווינדוס יריץ את התוכנה בשעה שהוגדרה לו

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

https://www.c-sharpcorner.com/article/task-scheduling-through-quartz-in-c-sharp/

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

ממש תודה על הלינק המצורף
 

Aharono

משתמש פעיל
D I G I T A L
אני לא בטוח שצריך להסתבך עם windows service

במידה והפעולות הן סטנדרטיות (כלומר, לא פעולות עתירות בזכרון ובCPU, כגון שליחת מייל, שליפה מdb וכיו"ב), אני הייתי מריץ את זה בתוך ה IIS... בסופו של דבר זה אותו פרויקט (ניהול קוד קל יותר בהרבה) וגם ככה הפעולה (שהיא לא כבדה בין כה) מתרחשת ב thread אחר....

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

אולי מעניין אותך גם...

הפרק היומי

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


תהילים פרק קכג

א שִׁיר הַמַּעֲלוֹת אֵלֶיךָ נָשָׂאתִי אֶת עֵינַי הַיֹּשְׁבִי בַּשָּׁמָיִם:ב הִנֵּה כְעֵינֵי עֲבָדִים אֶל יַד אֲדוֹנֵיהֶם כְּעֵינֵי שִׁפְחָה אֶל יַד גְּבִרְתָּהּ כֵּן עֵינֵינוּ אֶל יְהוָה אֱלֹהֵינוּ עַד שֶׁיְּחָנֵּנוּ:ג חָנֵּנוּ יְהוָה חָנֵּנוּ כִּי רַב שָׂבַעְנוּ בוּז:ד רַבַּת שָׂבְעָה לָּהּ נַפְשֵׁנוּ הַלַּעַג הַשַּׁאֲנַנִּים הַבּוּז לִגְאֵיוֹנִים:
נקרא  14  פעמים

לוח מודעות

למעלה