באג מוזר :-)
-
יום רביעי 28 מרץ 2012 10:35
אני עובדת בפרוייקט ASP.NET MVC 2
יש לי קונטרולר שאחראי לשליחת אימיילים ללקוחות.
כל מה שעושה הקונטרולר - זה בודק את הטבלה של שליחת האימילים, בודק למי עדיין לא שלח. מכין את האימייל, סופר כמה אימיילים שלח.
ומחזיר בסופו של דבר לדף משפט אחד: נשלחו X מיילים.
הפונקציה הראשית נראית כך:
public ActionResult Index() { int numOfEmailsSent=0; numOfEmailsSent = PrepareEmailToSend(); ViewData["Message"] = "נשלחו " + numOfEmailsSent + " אימיילים."; return View(); }דף הASPX גם הוא פשוט מאוד:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site1.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> <asp:Content ID="Content5" ContentPlaceHolderID="MainContent" runat="server"> <div class="margin"> <h2>שליחת אימיילים</h2> <p>סיים לשלוח אימיילים</p> <p><%=ViewData["Message"]%></p> </div> </asp:Content>הבעיה היא כזו.
עובדי השירות לקוחות עובדים עם תוכנה אקססית, ולכן כשהם רוצים לשלוח את האימייל - הם לוחצים בתוכנת אקסס על קישור לדף - ולמעשה מייד כשהדף נפתח - הוא שולח את האימיילים
ומציג כמה שלח.
רק מה - העובדים אמרו לי שתמיד הם מקבלים הודעה שנשלחו 0 אימיילים. ובעוד שלמעשה האימיילים כן נשלחו.
במהלך הבדיקות גיליתי שאכן כשלוחצים על הלינק מתוך תוכנת האקסס מקבלים את ההודעה "נשלחו 0 אימיילים" למרות שכן שלח.
אבל אם כותבים את הלינק ישירות בדפדפן - זה כותב בדיוק את מס' האימיילם שנשלחו לדוגמא "נשלחו 59 אימיילים"
מה יכול להיות הסיבה?
כל התגובות
-
יום רביעי 28 מרץ 2012 21:35מנחה דיון
היי,
האם ניסית לדבג את המתודה הבעייתית בשם "PrepareEmailToSend"? אם כן, האם הפונקציה מתנהגת בדיוק אותו דבר בשני המקרים?
אורי
-
יום רביעי 28 מרץ 2012 21:55
ב-2 המקרים מדובר על אותו דף בדיוק!
וזה מה שמוזר..
בזמן דיבג לא היתה שום בעיה.. וגם כשהעליתי לייצור ונכנסתי לדף דרך כתיבת הכתובת בדפדפן לא היתה בעיה
הבעיה היא רק כאשר מגיעים לדף מהקישור שבתוכנת האקסס.
בלכאורה אין לזה שום משמעות מאיזה קישור הגענו לדף...
אבל אולי..
-
יום חמישי 29 מרץ 2012 12:19
יכול להיות מצב היפוטטי ש:
המשתמש עשה double click? בין אם בכוונה ובין אם (לחצתי עוד פעם כי זה לא הגיב לי)
או
שבזמן נתון 2 אנשים עובדים על אותו איטם ואז אחד שולח בזמן שהשני מכין קפה ואז כשהוא סיים את הקפה הוא לוחץ על שליחה וזה מראה 0 כי זה כבר נשלח עם המשתמש הראשון.
אתה שולח ע"פ הרמטר רק את המיילים של האיטם הזה או ששליחה פשוט שולחת את כל הרשומות שקיימות לשליחה.
לא נראה לי שהכיוון שלך שיש באג ב MVC נכון אלה יותר ב FLOW של התוכנה.
- סומן כתשובה על-ידי Gooloosh יום שלישי 03 אפריל 2012 10:51
-
יום חמישי 29 מרץ 2012 12:35
במצב כמו שאתה מתאר היה צריך להיות שפעמים לחיצה דרך התוכנה מקבלת תוצאה 0 מיילים ולפעמים X מיילים
אני מדברת על מצב עקבי - שתמיד - גם כשמוודאים שאף אחד אחר לא משתמש בלינק זה - וכן ווידאתי בDBשאכן יש לו מה לשלוח-
הוא נותן תוצאה 0 למרות שמיד אח"כ כשמסתכלים בDB רואים שהוא כן שלח..
-
שבת 31 מרץ 2012 15:45בעלים
הי,
האם מצאת פתרון לבעיה?
תודה,
צוות הפורומים
מיקרוסופט מציעה שירות זה ללא תשלום, למטרת סיוע למשתמשים והעשרת הידע הקשור בטכנולוגיות ובמוצרים של מיקרוסופט. תוכן זה מתפרסם כפי שהוא והוא אינו מעיד על כל אחריות מצד מיקרוסופט.
-
יום ראשון 01 אפריל 2012 06:56לצערי לי :(
-
יום ראשון 01 אפריל 2012 10:05מנחה דיון
אפילו שמדובר על אותו דף יש סיכוי סביר שהקוד מתנהג שונה בזמן Production לעומת זמן Debug
אני מציע כן לשקול לדבג את הקוד בזמן Production ע"י התקנה של Visual Studio Remoe Debugger על מכונת השרת וביצוע דיבג שלו ממכונת הפיתוח שלך. מידע נוסף ניתן למצוא כאן
במידה ולא ניתן לבצע דיבג על שרת ה-Production אזיי שוה להוסיף הרבה מאוד Logging לפונקציה הבעייתית. ELMAH יכולה לעזור בזה.
בלי קשר ל-Logging ו-Debugging, באיזה סוג הרשאות את משתמשת? האם Windows Authentication? האם האתר מבצע במקרה Impersonation למשתמש אחר? גם נקודות אלו יכולות להשפיע על התקינות של הקוד.
אורי
-
יום ראשון 01 אפריל 2012 10:08
רעיונות טובים.
אני אנסה לבדוק אותם.
זה ייקח לי קצת זמן כי אני באמצע משהו אחר קצת דחוף (זה בכל אופן לא באג דחוף אלא רק מעצבן :)..
אבל מבטיחה לעדכן פה בפורום אם יהיה לי תובנות.
תודה
-
יום שני 02 אפריל 2012 13:09מנחה דיון
בפועל לא אמור להיות הבדל בין לינק שנלחץ מאקסס לבין URL שמוזן ישירות בדפדפן. למקרה של ספק מה שאני ממליץ זה להרים סניפר על התקשורת, כגון פידלר, ולאתר את שתי ההודעות שנשלחות - האחת בלינק מהאקסס והשניה הידנית שמוזנת בדפדפן. לכל אחת מההודעות לראות מה התשובה שחוזרת, ואם אכן התשובה שונה, לנסות לזהות האם יש שוני בבקשה.
את ההודעות שאותרו בפידלר ניתן תמיד לשמור בצד ולשחזר אותן תוך כדי הרצת דיבאגר על הפרויקט.
Please mark posts as answers/helpful if it answers your question.
Senior Consultant on WCF, ASP.NET, Siverlight, and Entity Framework. Author of Microsoft's Official WCF 4 Course. Co-author of the Microsoft HPC/Azure burst whitepaper.
Visit my blog: http://blogs.microsoft.co.il/blogs/idof -
יום שני 02 אפריל 2012 19:38
ניחוש שלי בעיה ב HISTORY.תנסי להווסיף משתנה ל URL
-
יום שלישי 03 אפריל 2012 06:40
-
יום שלישי 03 אפריל 2012 10:51
tetitu - כנראה שאתה צדקת.
שלחתי את הלינק של האקסס - שיפעל על הלוקל שלי כך שאוכל לדבג אותו.
ואז גיליתי שאיכשהוא האקסס יוצר דבל קליק - לא ברור לי איך אבל כשלוחצים על הלינק (פעם אחת בוודאות) באקסס
הוא מגיע לקונטרולר מבצע הכל כשורה - מכין אימיליים שולח ומחזיר כמה הוא שלח - מגיע לaspx ומיד חוזר לקונרולר - עוד לפני שהוא מציג את הדף.
ואז כמובן אין לו אימיילים.. והוא מחזיר הודעה שלח 0 אימיילים.
הפתרון שעשיתי. מכיון שהמערכת האקססית היא זמנית (אנחנו בונים מערכות למוקד בMVC 3) - אין לי ענין לחקור את האקסס למה הוא יוצר 2 קריאות
במקום זה אני בודקת בקוד אם הוא לא שלח ב-5 דקות האחרונות אימיילים אם כן - הוא בודק כמה נשלחו בטווח של ה-5 דקות מאז השליחה האחרונה ומחזיר את הערך.
וזה אכן פתר את הבעיה.
תודה לכל המסייעים!!