locked
באג מוזר :-) RRS feed

  • שאלה

  • אני עובדת בפרוייקט 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 10:35

תשובות

  • יכול להיות מצב היפוטטי ש:

    המשתמש עשה double click? בין אם בכוונה ובין אם (לחצתי עוד פעם כי זה לא הגיב לי)

    או

    שבזמן נתון 2 אנשים עובדים על אותו איטם ואז אחד שולח בזמן שהשני מכין קפה ואז כשהוא סיים את הקפה הוא לוחץ על שליחה וזה מראה 0 כי זה כבר נשלח עם המשתמש הראשון.

    אתה שולח ע"פ הרמטר רק את המיילים של האיטם הזה או ששליחה פשוט שולחת את כל הרשומות שקיימות לשליחה.

    לא נראה לי שהכיוון שלך שיש באג ב MVC נכון אלה יותר ב FLOW של התוכנה.

    • סומן כתשובה על-ידי Gooloosh יום שלישי 03 אפריל 2012 10:51
    יום חמישי 29 מרץ 2012 12:19

כל התגובות

  • היי,

    האם ניסית לדבג את המתודה הבעייתית בשם "PrepareEmailToSend"? אם כן, האם הפונקציה מתנהגת בדיוק אותו דבר בשני המקרים?

    אורי

    יום רביעי 28 מרץ 2012 21:35
    מנחה דיון
  • ב-2 המקרים מדובר על אותו דף בדיוק!

    וזה מה שמוזר..

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

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

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

    אבל אולי..

    יום רביעי 28 מרץ 2012 21:55
  • יכול להיות מצב היפוטטי ש:

    המשתמש עשה double click? בין אם בכוונה ובין אם (לחצתי עוד פעם כי זה לא הגיב לי)

    או

    שבזמן נתון 2 אנשים עובדים על אותו איטם ואז אחד שולח בזמן שהשני מכין קפה ואז כשהוא סיים את הקפה הוא לוחץ על שליחה וזה מראה 0 כי זה כבר נשלח עם המשתמש הראשון.

    אתה שולח ע"פ הרמטר רק את המיילים של האיטם הזה או ששליחה פשוט שולחת את כל הרשומות שקיימות לשליחה.

    לא נראה לי שהכיוון שלך שיש באג ב MVC נכון אלה יותר ב FLOW של התוכנה.

    • סומן כתשובה על-ידי Gooloosh יום שלישי 03 אפריל 2012 10:51
    יום חמישי 29 מרץ 2012 12:19
  • במצב כמו שאתה מתאר היה צריך להיות שפעמים לחיצה דרך התוכנה מקבלת תוצאה 0 מיילים ולפעמים X מיילים

    אני מדברת על מצב עקבי - שתמיד - גם כשמוודאים שאף אחד אחר לא משתמש בלינק זה - וכן ווידאתי בDBשאכן יש לו מה לשלוח-

    הוא נותן תוצאה 0 למרות שמיד אח"כ כשמסתכלים בDB רואים שהוא כן שלח..

    יום חמישי 29 מרץ 2012 12:35
  • הי,

    האם מצאת פתרון לבעיה?

    תודה,

    צוות הפורומים


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

    שבת 31 מרץ 2012 15:45
  • לצערי לי :(
    יום ראשון 01 אפריל 2012 06:56
  • אפילו שמדובר על אותו דף יש סיכוי סביר שהקוד מתנהג שונה בזמן Production לעומת זמן Debug

    אני מציע כן לשקול לדבג את הקוד בזמן Production ע"י התקנה של Visual Studio Remoe Debugger על מכונת השרת וביצוע דיבג שלו ממכונת הפיתוח שלך. מידע נוסף ניתן למצוא כאן

    במידה ולא ניתן לבצע דיבג על שרת ה-Production אזיי שוה להוסיף הרבה מאוד Logging לפונקציה הבעייתית. ELMAH יכולה לעזור בזה.

    בלי קשר ל-Logging ו-Debugging, באיזה סוג הרשאות את משתמשת? האם Windows Authentication? האם האתר מבצע במקרה Impersonation למשתמש אחר? גם נקודות אלו יכולות להשפיע על התקינות של הקוד.

    אורי

    יום ראשון 01 אפריל 2012 10:05
    מנחה דיון
  • רעיונות טובים.

    אני אנסה לבדוק אותם.

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

    אבל מבטיחה לעדכן פה בפורום אם יהיה לי תובנות.

    תודה

    יום ראשון 01 אפריל 2012 10:08
  • בפועל לא אמור להיות הבדל בין לינק שנלחץ מאקסס לבין 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 13:09
    מנחה דיון
  • ניחוש שלי בעיה ב HISTORY.תנסי להווסיף משתנה ל URL

    יום שני 02 אפריל 2012 19:38
  • NoundaDee

    הוספת פרמטר לURL לא עזרה . תודה בכל אופן

    Ido Flatow. _ - את הרעיון שלך אני צרכה עוד לנסות

    יום שלישי 03 אפריל 2012 06:40
  • tetitu - כנראה שאתה צדקת.

    שלחתי את הלינק של האקסס - שיפעל על הלוקל שלי כך שאוכל לדבג אותו.

    ואז גיליתי שאיכשהוא האקסס יוצר דבל קליק - לא ברור לי איך אבל כשלוחצים על הלינק (פעם אחת בוודאות) באקסס

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

    ואז כמובן אין לו אימיילים.. והוא מחזיר הודעה שלח 0 אימיילים.

    הפתרון שעשיתי. מכיון שהמערכת האקססית היא זמנית (אנחנו בונים מערכות למוקד בMVC 3) - אין לי ענין לחקור את האקסס למה הוא יוצר 2 קריאות

    במקום זה אני בודקת בקוד אם הוא לא שלח ב-5 דקות האחרונות אימיילים אם כן - הוא בודק כמה נשלחו בטווח של ה-5 דקות מאז השליחה האחרונה ומחזיר את הערך.

    וזה אכן פתר את הבעיה.

    תודה לכל המסייעים!!

    יום שלישי 03 אפריל 2012 10:51