-
בניתי תוכנה לניהול עסק בc# winform המתממשקת לSQL
אני מעוניין לחבר אותה למרכזייה ע"מ להקפיץ למשתמש חלון של שיחה נכנסת
ומעבר לכרטיס לקוחהבעיה שלי היא בשיחות נכנסות
להיכן לשלוח את המידע מהמרכזייה ואיך אוכל לשלוף אותו לשימושהמרכזייה יכולה בכל קבלת שיחה לשלוח לי התרעה (XML/GET/POST) המכילה את מספר המתקשר / ולאיזה מספר חייג
איך אני מתקדם מכאן?
איך ואיפה אני אמור לקבל את נתוני הAPI ולהשתמש בוהאם התהליך אמור להיות שההתרעה מעדכנת/מוסיפה שורה בטבלה במסד נתונים כלשהו
ובמקביל להריץ טיימר בתוכנה המקומית שיבדוק כל שניה מה המספר שמופיע שם
ובהתאם לכך לעשות פעולהאו שיש דרך קלה ונכונה יותר לביצוע
-
@mekev רק הערה, בכמה פעמים אחרונות (לא בכולם!) ששאלתם בפורום זה היה נראה "פגע וברח".
לתשומת לבכם, זה לא מזמין להשקיע בתשובה.לשאלתכם, קצת חסרים פרטים.
יש לנו שלושה מערכות:
א. תכונה שולחנית
ב. שרת מסד נתונים
ג. מרכזיההמרכזיה (ג' )מוכנה להודיע לכל מאן דבעי שיש שיחה, אבל בפרוטוקול http, כלומר בקשת אינטרנט.
האם התוכנה (א') והשרת (ב') זה אותה מחשב? התוכנה רצה על מחשבים מרובים?
האם למחשב שמריץ את הSQL יש כתובת אייפי פרטית קבועה? -
@mekev
אתה צריך לבנות תוכנה יחידנית שרצה ברקע ללא תלות במשתמש נוכחי (מקובל לקרוא לזה שירות).
התוכנה הזו צריכה "להאזין" לפרוטוקול HTTP בפורט כל שהוא (אתה יכול להשתמש בHttpListener, עליך לפתוח בחומת האש את הפורט ועדיף לפתוח אותו רק לאייפי של המרכזיה או ברמת התכונה לדחות בקשות שאינם ממנה)
ולהגדיר למרכזיה את האייפי של השרת שלך, ובהתקבל הודעה של שיחה לרשום את זה בטבלה במסד.מפה יש כמה דרכים:
א. דרך פשוטה, לעשות טיימר בתוכנה שבודק שורות חדשות בטבלת הSQL, עדיף שהטבלה תהיה עם מפתח ראשי identity והשאילתה תשלוף TOP X עם ORDER BY ID DESC, ככה המסד לא מתאמץ כלל.
ב. דרך נוספת פשוטה יחסית שראיתי שתוכנות עושות זה לבנות מאזין בתכונה לשינויים בתיקיה מסויימת (FileSystemWatcher) ובעת קבלת שיחה נכנסת השירות כותב לתיקיה זו קובץ ריק.
ג. הדרך הכי יעילה זה לעשות גם מאזין בתוכנה, מסוג UDP broadcast (דוגמה), ואז התוכנה שרצה ברקע יכולה להודיע לכל התוכנות שהתקבלה שיחה חדשה. -
אתה מעמיד אותי בדילמה
לולי הערתך לגבי ה'פגע וברח'
הייתי כעת לא מגיב
והולך לעשות שיעורי בית (איך לבנות את התוכנה הקטנה שתאזין לפרוטוקול HTTP)כי ברשותי ידע דל בתכנות (ובאנגלית...)
ולוקח לי זמן לבדוק ולהבין את התשובותכך שאני עובד על הפרויקט הזה מכמה כיוונים
ושאני מתקשה - מחפש בstack בעזרת גוגל טרנסלייט
ובמידה ולא מוצא - שואל בפורום הנכבד הזהכך שלהגיב רק "תודה רבה"
נראה לי שישבש את פעילות הפורום
(תתאר לעצמך נושא שיש בו שלושים תגובות והשואל מגיב 'תודה' אחרי כל תגובה)וכשאני מצליח ליישם את התשובה
אין לי מה לחדש בתגובה שזה עובד כי זה בעצם המשיב כתבלגופו של עניין
ברמה האישית - באמת תודה ענקית על עזרתך (אני נעזר רבות בתשובות קיימות בפורום)
ובפרט בתשובה זו
המפורטת מאוד
ובעיקר על העדכון שהוספת בתשובה לאחר הפרסוםאני ינסה לבנות את התוכנה שתאזין + האפשרות א שהצעת
(עזר לי מאוד התוספת שעדיף להוסיף שורות ולבדוק את השורה האחרונה במקום לעדכן שורה קיימת)שבוע טוב ומבורך
-
@mekev תודה רבה על הדברים!
להגיב סתם תודה רבה אבדוק, זה אולי מיותר (אבל ממש לא פוגע בשגרת הפורום, כולו מלא מזה).
(אגב, יש אפשרות להודות בצורה מינימליסטית מאוד - מתחת לכל הודעה בצד שמאל יש חץ כלפי מעלה שאומר: הפוסט מועיל/ראוי. זה מחווה קטנה ומאוד "מפדבקת" את העונה).
אבל מה הבעיה לעדכן אחרי חודש? ולמה לא לשתף מה הסיבוך שלך כעת שעליו אתה יוצא למסע בירור, אולי גם בזה הרי יעזרו לך.נ.ב. עדכון של שורה לא בטוח יותר מהר מהוספה, אבל אני מאמין שתרצה היסטוריה של הנוטיפקציות שהתוכנה קיבלה, וככה אתה מרויח את שניהם.
-
@mekev אמר בחיבור מרכזייה לתוכנה מקומית (api <> c# winform):
בניתי תוכנה לניהול עסק בc# winform המתממשקת לSQL
האם התהליך אמור להיות שההתרעה מעדכנת/מוסיפה שורה בטבלה במסד נתונים כלשהו
ובמקביל להריץ טיימר בתוכנה המקומית שיבדוק כל שניה מה המספר שמופיע שם
ובהתאם לכך לעשות פעולהאו שיש דרך קלה ונכונה יותר לביצוע
קל וקשה זה עניין יחסי.
לדעתי הדרך הכי נכונה לעשות את זה זה על ידי WebSocker בצד של הקליינט ולשלוח לשם את השיחות הנכנסות.
למה לדעתי יש בזה עדיפות על הדרך שכתבת:- אתה לא שומר מידע מיותר - הרי אין לך שום צורך במידע של מי שחייג רק לצורך ההקצפה בקליינט.
- מיידיות - ההתראה היא מיידי ממש בצד לקוח.
- מניעת פספוס שיחות. יש דרך למנוע את זה גם בלי שימוש עם WebSpcket אבל לפי מה שכתבת אתה רוצה לשמור שדה אחד במסד נתונים עם המתקשר הנוכחי ולפיו להודיע באתר. מה עם יש כמה כאלה?
אין לי יודע מה הצד שרת שלך ולכן אני לא יודע אם בוודאות השיטה הזו מתאימה לך אבל בגלל שלא ציינת את הדברים הללו עניתי את דעתי.
עריכה: אני מעין שוב בשאלה ואני מבין שמדובר בתוכנה ולא בממשק אינטרנטי אז יתכן שהתשובה לא רלוונטית.
-