משיב מוביל
Object reference not set to an instance of an object

שאלה
-
יש לי את העמוד אינטרנט הפשוט מאוד הזה:
<%@ Page Language="VB" AutoEventWireup="false"%> <script runat="server"> </script> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> </div> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="ObjectDataSource1"> <Columns> <asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" ReadOnly="True" SortExpression="ID" /> <asp:BoundField DataField="ARMY_TYPE" HeaderText="ARMY_TYPE" SortExpression="ARMY_TYPE" /> <asp:BoundField DataField="MARK" HeaderText="MARK" SortExpression="MARK" /> </Columns> </asp:GridView> <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DeleteMethod="Delete" InsertMethod="Insert" OldValuesParameterFormatString="original_{0}" SelectMethod="GetDataBy_ALL" TypeName="DataSet_TableAdapters.ARMY_typeTableAdapter" UpdateMethod="Update"> <DeleteParameters> <asp:Parameter Name="Original_ID" Type="Int32" /> </DeleteParameters> <InsertParameters> <asp:Parameter Name="ARMY_TYPE" Type="String" /> <asp:Parameter Name="MARK" Type="Int32" /> </InsertParameters> <UpdateParameters> <asp:Parameter Name="ARMY_TYPE" Type="String" /> <asp:Parameter Name="MARK" Type="Int32" /> <asp:Parameter Name="Original_ID" Type="Int32" /> </UpdateParameters> </asp:ObjectDataSource> </form> </body> </html>
כשאני מריץ את העמוד בVS2010 הכול עובד כמובן מצוין, אבל כשאני מריץ אותו בשרת מופיעה הודעת שגיאה:
Object reference not set to an instance of an object
Description: HTTP 500. Error processing request.
Stack Trace:
- נערך על-ידי AlexYou יום חמישי 04 אוקטובר 2012 07:55
יום חמישי 04 אוקטובר 2012 07:52
תשובות
-
יש שתי נקודות קלאסיות שבדרך כלל "נופלים" עליהם כשעוברים מהרצה תחת Visual Studio להרצה אמיתית תחת IIS:
- Virtual Directory - לרוב, תחת IIS מוגדר Virtual Directory בעוד שתחת Visual Studio לא מוגדר. המשמעות היא שה-URL שאליו ניגש הדפדפן משתנה ממשהו בסגנון "http://localhost:12345" למשהו בסגנון "http://localhost/app". במידה
ויש לך קוד שעושה מניפולציה על ה-URL אזיי יש לשים לב להבדל ולבדוק בהתאם
- Security - כאשר מריצים תחת Visual Studio הקוד שלך רץ תחת ההרשאות של המשתמש שלך. לרוב מדובר על משתמש שהוא אדמינסטרטור ולכן "הכל" עובד. כאשר מריצים תחת IIS הקוד רץ תחת חשבון שמוגדר ב-IIS. זהות החשבון הוא תלוי קונפיגרציה ולכן גם הצלחת הקוד היא תלוית קונפיגורציה. עליך לבדוק ב-IIS ש-Application Pool תחתיו האפליקציה שלך רצה מוגדר לרוץ עם חשבון בעל הרשאות מתאימות במערכת (לרבות הרשאות ב-SQL)
אורי
- הוצע כתשובה על-ידי pituachMVP, Editor יום רביעי 21 נובמבר 2012 19:12
- סומן כתשובה על-ידי Eran Sharvit יום ראשון 28 ספטמבר 2014 08:03
שבת 13 אוקטובר 2012 21:27מנחה דיון - Virtual Directory - לרוב, תחת IIS מוגדר Virtual Directory בעוד שתחת Visual Studio לא מוגדר. המשמעות היא שה-URL שאליו ניגש הדפדפן משתנה ממשהו בסגנון "http://localhost:12345" למשהו בסגנון "http://localhost/app". במידה
ויש לך קוד שעושה מניפולציה על ה-URL אזיי יש לשים לב להבדל ולבדוק בהתאם
-
אלכס חסר לנו מידע שאתה יכול להביא בקלות ובמהירות :-)
בינתיים אנשים סתם מנחשים אפשרויות שונות וחבל :-(
נסה לצרף לנו את הודעת השגיאה המלאה כולל השורה.
נסה לצרף לנו את הקוד של המחלקה החסרה בקוד ושאליה אתה פונהואם אנחנו כבר בניחוש...
האם יש לך את המחלקה הבאה?
DataSet_TableAdapters.ARMY_typeTableAdapter
והאם יש לך את המתודה בשם GetDataBy_ALL ?
אתה פונה אלהם ולא צירפת לנו את כל הקוד או שפשוט הוא לא קיים לך בשרת החי וכן בפיתוח?
אולי הקישור הבא מעט יעזור לך:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.objectdatasource.selectmethod.aspxשים לב:
At run time, the object is created and the method is called using reflection. The GridView control enumerates through the IEnumerable collection that is returned by the method that is specified by the SelectMethod property, and displays the data.
- הוצע כתשובה על-ידי pituachMVP, Editor יום רביעי 21 נובמבר 2012 19:11
- סומן כתשובה על-ידי Eran Sharvit יום ראשון 28 ספטמבר 2014 08:03
יום שישי 26 אוקטובר 2012 18:46משיב
כל התגובות
-
נראה שאתה עובד מול object data source שמביא נתונים מה-DB.
הימור שלי הוא שאתה לא מצליח לתקשר כמו שצריך עם ה-DB, או הנתונים שמגיעים משם לא תואמים את מה שיש אצלך במחשב, ולכן אתה מקבל שגיאה.
המלצתי - לדבאג בין אם ע"י הוספת הודעות דיבאג (response.write) או ע"י הוצאת הודעות trace והפעלת tracing ב-web.config, ולנסות לזהות מה המידע שחוזר מה-select method ולראות איפה התקלה. אגב, לא מופיע שום stack trace בהודעה שפרסמת, האם ראית אותו כשהופיעה השגיאה?
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שבת 13 אוקטובר 2012 07:17מנחה דיון -
יש שתי נקודות קלאסיות שבדרך כלל "נופלים" עליהם כשעוברים מהרצה תחת Visual Studio להרצה אמיתית תחת IIS:
- Virtual Directory - לרוב, תחת IIS מוגדר Virtual Directory בעוד שתחת Visual Studio לא מוגדר. המשמעות היא שה-URL שאליו ניגש הדפדפן משתנה ממשהו בסגנון "http://localhost:12345" למשהו בסגנון "http://localhost/app". במידה
ויש לך קוד שעושה מניפולציה על ה-URL אזיי יש לשים לב להבדל ולבדוק בהתאם
- Security - כאשר מריצים תחת Visual Studio הקוד שלך רץ תחת ההרשאות של המשתמש שלך. לרוב מדובר על משתמש שהוא אדמינסטרטור ולכן "הכל" עובד. כאשר מריצים תחת IIS הקוד רץ תחת חשבון שמוגדר ב-IIS. זהות החשבון הוא תלוי קונפיגרציה ולכן גם הצלחת הקוד היא תלוית קונפיגורציה. עליך לבדוק ב-IIS ש-Application Pool תחתיו האפליקציה שלך רצה מוגדר לרוץ עם חשבון בעל הרשאות מתאימות במערכת (לרבות הרשאות ב-SQL)
אורי
- הוצע כתשובה על-ידי pituachMVP, Editor יום רביעי 21 נובמבר 2012 19:12
- סומן כתשובה על-ידי Eran Sharvit יום ראשון 28 ספטמבר 2014 08:03
שבת 13 אוקטובר 2012 21:27מנחה דיון - Virtual Directory - לרוב, תחת IIS מוגדר Virtual Directory בעוד שתחת Visual Studio לא מוגדר. המשמעות היא שה-URL שאליו ניגש הדפדפן משתנה ממשהו בסגנון "http://localhost:12345" למשהו בסגנון "http://localhost/app". במידה
ויש לך קוד שעושה מניפולציה על ה-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יום שישי 26 אוקטובר 2012 07:38מנחה דיון -
אלכס חסר לנו מידע שאתה יכול להביא בקלות ובמהירות :-)
בינתיים אנשים סתם מנחשים אפשרויות שונות וחבל :-(
נסה לצרף לנו את הודעת השגיאה המלאה כולל השורה.
נסה לצרף לנו את הקוד של המחלקה החסרה בקוד ושאליה אתה פונהואם אנחנו כבר בניחוש...
האם יש לך את המחלקה הבאה?
DataSet_TableAdapters.ARMY_typeTableAdapter
והאם יש לך את המתודה בשם GetDataBy_ALL ?
אתה פונה אלהם ולא צירפת לנו את כל הקוד או שפשוט הוא לא קיים לך בשרת החי וכן בפיתוח?
אולי הקישור הבא מעט יעזור לך:
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.objectdatasource.selectmethod.aspxשים לב:
At run time, the object is created and the method is called using reflection. The GridView control enumerates through the IEnumerable collection that is returned by the method that is specified by the SelectMethod property, and displays the data.
- הוצע כתשובה על-ידי pituachMVP, Editor יום רביעי 21 נובמבר 2012 19:11
- סומן כתשובה על-ידי Eran Sharvit יום ראשון 28 ספטמבר 2014 08:03
יום שישי 26 אוקטובר 2012 18:46משיב -
שבת 27 ספטמבר 2014 07:49משיב