06-05-16, 08:42 PM
(آخر تعديل لهذه المشاركة : 06-05-16, 08:45 PM {2} بواسطة myalsailamy.)
طريقة الاخوان جميله جدا و عمليه ،، بالنسبه لي انا احب اتحكم بكتابة اكوادي لاقصى درجه ، و طالما اقدر اتعامل معاه فلا بأس بكتابتي للاكواد لانها لا تمنعك من فعل ما تريد بعكس المكاتب المغلقه او المطوره من خلال غيرك ، لانها تتناسب مع مزاجي ما عدى حالات متقدمه مثل تطوير مكتبة ضغط ملفات و عرض pdf و و الخ هنا تستخدم مكاتب خارجية جاهزه و معتمده ، على العموم الشغله الي استخدمتها جدا بسيطه وهي كالتالي :
تضيف هذا الكلاس لانه راح يحمل بيانات الخطأ البرمجي الذي حصل :
الفكره في تصيد الخطأ في تطبيق Asp.Net بالكامل يكمن في وضع اكوادك بداخل ملف Global.asax تحديدا في الحدث Application_Error هنا عندما يكون هناك رابط مفقود بالموقع او حصل خطا في قاعدة البيانات او خطأ منطقي يتم تفعيل هذا الحدث ، طبعا هذا الكود الخاص بي لعملية تعبئة بيانات الخطا في متغير من نوع الكلاس الذي بالاعلى ، و هذا هو الكود :
طبعا اذا كنت تشتغل على جهازك ما راح يتفعل الكود و راح يظهر لك الخطا بالشاشة الصفراء لتحل الخطأ لكن عندما يرفع للسيرفر يتفعل الحدث و يمكن تجربته على جهازك الحالي من خلال حذف هذا السطر :
ايضا بالنسبه لي في عملية الاخطا التي تحصل بسبب قواعد البيانات ، بحث و وصلت لنتيجه وهو لماذا عندا يحصل خطا في المدخلات على جمل الاستعلام لا احفظ جملة الاستعلام بالمدخلات التي قام بها المستخدم و حفظها في ملف نصي و عندما اقوم بتجربته لا احتاج ان اسأل المستخدم ما الذي ادخلته كل ما احتاجه هو جملة Query التي طبقها المستخدم على قاعدة البيانات مضمنه بالمتغيرات التي ادخلها و عندها اعرف سبب الخطا ،، و سأكتب عنها المره القادمه اذا اسعفني الوقت ، لاني غالبا اتصفح المنتدى من خلال هاتفي
تحياتي ،، وشكرا على الكود الذي شاركته
تضيف هذا الكلاس لانه راح يحمل بيانات الخطأ البرمجي الذي حصل :
كود :
Public Class ReportErrorTable
#Region " Private variables "
Private ReportErrorID_Att As Integer ' رقم التقرير
Private ReportErrorTitle_Att As String ' عنوان التقرير
Private ReportErrorInsertDate_Att As Date ' تاريخ الحدوث
Private ReportErrorInsertTime_Att As TimeSpan ' وقت الحدوث
Private ReportErrorPageLink_Att As String ' رابط الصفحه
Private ReportErrorContent_Att As String ' محتوى التقرير
Private ReportErrorUserID_Att As Integer ' رقم المستخدم
Private ReportErrortype_Att As String ' نوع التقرير
#End Region
#Region " Properties "
''' <summary>
'''رقم التقرير
''' </summary>
Public Property ReportErrorID As Integer
Get
Return ReportErrorID_Att
End Get
Set(ByVal ReportErrorID_value As Integer)
ReportErrorID_Att = ReportErrorID_value
End Set
End Property
''' <summary>
'''عنوان التقرير
''' </summary>
Public Property ReportErrorTitle As String
Get
Return ReportErrorTitle_Att
End Get
Set(ByVal ReportErrorTitle_value As String)
ReportErrorTitle_Att = ReportErrorTitle_value
End Set
End Property
''' <summary>
'''تاريخ الحدوث
''' </summary>
Public Property ReportErrorInsertDate As Date
Get
Return ReportErrorInsertDate_Att
End Get
Set(ByVal ReportErrorInsertDate_value As Date)
ReportErrorInsertDate_Att = ReportErrorInsertDate_value
End Set
End Property
''' <summary>
'''وقت الحدوث
''' </summary>
Public Property ReportErrorInsertTime As TimeSpan
Get
Return ReportErrorInsertTime_Att
End Get
Set(ByVal ReportErrorInsertTime_value As TimeSpan)
ReportErrorInsertTime_Att = ReportErrorInsertTime_value
End Set
End Property
''' <summary>
'''رابط الصفحه
''' </summary>
Public Property ReportErrorPageLink As String
Get
Return ReportErrorPageLink_Att
End Get
Set(ByVal ReportErrorPageLink_value As String)
ReportErrorPageLink_Att = ReportErrorPageLink_value
End Set
End Property
''' <summary>
'''محتوى التقرير
''' </summary>
Public Property ReportErrorContent As String
Get
Return ReportErrorContent_Att
End Get
Set(ByVal ReportErrorContent_value As String)
ReportErrorContent_Att = ReportErrorContent_value
End Set
End Property
''' <summary>
'''رقم المستخدم
''' </summary>
Public Property ReportErrorUserID As Integer
Get
Return ReportErrorUserID_Att
End Get
Set(ByVal ReportErrorUserID_value As Integer)
ReportErrorUserID_Att = ReportErrorUserID_value
End Set
End Property
''' <summary>
'''نوع التقرير
''' </summary>
Public Property ReportErrortype As String
Get
Return ReportErrortype_Att
End Get
Set(ByVal ReportErrortype_value As String)
ReportErrortype_Att = ReportErrortype_value
End Set
End Property
#End Region
End Classالفكره في تصيد الخطأ في تطبيق Asp.Net بالكامل يكمن في وضع اكوادك بداخل ملف Global.asax تحديدا في الحدث Application_Error هنا عندما يكون هناك رابط مفقود بالموقع او حصل خطا في قاعدة البيانات او خطأ منطقي يتم تفعيل هذا الحدث ، طبعا هذا الكود الخاص بي لعملية تعبئة بيانات الخطا في متغير من نوع الكلاس الذي بالاعلى ، و هذا هو الكود :
كود :
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs when an unhandled error occurs
If HttpContext.Current.Request.Url.AbsoluteUri.Contains("localhost") = False Then
Dim con As HttpContext = HttpContext.Current
Dim v = Server.GetLastError()
Dim VisitNo As Integer = 0
Dim oReportError As New ReportErrorTable
oReportError.ReportErrorTitle = Trim(Convert.ToString(v.Message))
oReportError.ReportErrorPageLink = Trim(Convert.ToString(con.Request.Url))
oReportError.ReportErrorContent = Trim(Convert.ToString(v.InnerException))
Try
VisitNo = Val(System.Web.HttpContext.Current.Session("VisitorIDNo"))
Catch ex As Exception
End Try
oReportError.ReportErrorUserID = VisitNo
Dim HttpEx = TryCast(v, HttpException)
If HttpEx IsNot Nothing AndAlso HttpEx.GetHttpCode() = 404 Then
' ' Invalid URL
oReportError.ReportErrortype = Trim("Miss_Link")
oReportError.insertIntoReportErrorTable()
Server.Transfer("~/PageNotFound.aspx")
Else
' ' Exception
oReportError.ReportErrortype = Trim("Error")
oReportError.insertIntoReportErrorTable()
' ' Here save text file containing this error details
Server.Transfer("~/PageShowError.aspx")
End If
End If
End Subطبعا اذا كنت تشتغل على جهازك ما راح يتفعل الكود و راح يظهر لك الخطا بالشاشة الصفراء لتحل الخطأ لكن عندما يرفع للسيرفر يتفعل الحدث و يمكن تجربته على جهازك الحالي من خلال حذف هذا السطر :
كود :
If HttpContext.Current.Request.Url.AbsoluteUri.Contains("localhost") = False Thenايضا بالنسبه لي في عملية الاخطا التي تحصل بسبب قواعد البيانات ، بحث و وصلت لنتيجه وهو لماذا عندا يحصل خطا في المدخلات على جمل الاستعلام لا احفظ جملة الاستعلام بالمدخلات التي قام بها المستخدم و حفظها في ملف نصي و عندما اقوم بتجربته لا احتاج ان اسأل المستخدم ما الذي ادخلته كل ما احتاجه هو جملة Query التي طبقها المستخدم على قاعدة البيانات مضمنه بالمتغيرات التي ادخلها و عندها اعرف سبب الخطا ،، و سأكتب عنها المره القادمه اذا اسعفني الوقت ، لاني غالبا اتصفح المنتدى من خلال هاتفي
تحياتي ،، وشكرا على الكود الذي شاركته
اسم معرفي : محمد يحيى
