إضافة المزيد من المعلومات إلى العرف استثناء

StackOverflow https://stackoverflow.com/questions/48773

  •  09-06-2019
  •  | 
  •  

سؤال

لقد خلق العرف استثناء محدد جدا المشكلة التي يمكن أن تذهب الخطأ.تلقي البيانات من نظام آخر ، ورفع الاستثناء إذا كان من القنابل أثناء محاولة تحليل تلك البيانات.في العرف استثناء, لقد تم إضافة حقل يسمى "ريسبونسيداتا" لذا أنا يمكن أن تتبع بالضبط ما قانون بلدي لا يمكن التعامل معها.

في العرف الاستثناءات مثل هذا واحد ، ينبغي أن إضافي استجابة البيانات تذهب إلى استثناء "رسالة"?إذا كان يذهب إلى هناك رسالة يمكن أن تكون ضخمة.أريد ذلك هناك لأني باستخدام Elmah و هو كيف يمكنني الحصول على تلك البيانات.

لذا فإن السؤال هو إما:- كيف يمكنني الحصول على Elmah لتسجيل معلومات إضافية من حقل مخصص استثناء أو - يجب إضافية تفاصيل الاستثناء تذهب إلى "رسالة" الملكية ؟

هل كانت مفيدة؟

المحلول

لا يجب ملء .Message مع تصحيح المعلومات ، بل موجزة مفيدة جزء من النص.

http://msdn.microsoft.com/en-us/library/system.exception.message.aspx

نص الرسالة تماما لوصف خطأ وينبغي إذا أمكن شرح كيفية تصحيحها. قيمة الرسالة الملكية المدرجة في المعلومات التي تم إرجاعها بواسطة ToString.

الرسالة يتم تعيين الخاصية فقط عند إنشاء استثناء.إذا كان أي رسالة تم تزويد منشئ الحالي سبيل المثال ، نظام لوازم الرسالة الافتراضي الذي تم تنسيقه باستخدام النظام الحالي الثقافة.

[..]

ملاحظات على الورثة:

الرسالة الملكية هو تجاوز في الفئات التي تتطلب السيطرة على محتوى الرسالة أو الشكل.رمز التطبيق عادة بالوصول إلى هذه الخاصية عندما يحتاج إلى عرض معلومات حول استثناء أن تم القبض عليهم.

رسالة الخطأ يجب أن تكون مترجمة.

رد البيانات لا يعتبر وصفا.

عدم دراية elmah لا أستطيع أن أقول لك كيفية تمديد Exception فئة حين استخدامه.لا elmah تنفيذ استراتيجيتها الخاصة فرعية إلى Exception?أو واجهة ؟ يمكنك فرعية ذلك بنفسك ؟

نصائح أخرى

في العرف الاستثناءات مثل هذا واحد ، يجب أن إضافي استجابة البيانات في الاستثناء "رسالة"?

لا ، سورين أشار بالفعل.ومع ذلك ، نوع الاستثناء قد تجاوز ToString و معقولة إضافة رد البيانات المعلومات هناك.هذا طبيعي الممارسة المتبعة من قبل العديد من أنواع الاستثناءات في BCL (مكتبة الفئة الأساسية) حتى أنك لن تجد نفسك السباحة ضد التيار.على سبيل المثال, إلقاء نظرة على النظام.IO.FileNotFoundException.ToString التنفيذ في SSCLI (الدوار):

public override String ToString()
{
    String s = GetType().FullName + ": " + Message;

    if (_fileName != null && _fileName.Length != 0)
        s += Environment.NewLine + String.Format(Environment.GetResourceString("IO.FileName_Name"), _fileName);

    if (InnerException != null)
        s = s + " ---> " + InnerException.ToString();

    if (StackTrace != null)
        s += Environment.NewLine + StackTrace;

    try
    {
        if(FusionLog!=null)
        {
            if (s==null)
                s=" ";
            s+=Environment.NewLine;
            s+=Environment.NewLine;
            s+="Fusion log follows: ";
            s+=Environment.NewLine;
            s+=FusionLog;
        }
    }
    catch(SecurityException)
    {

    }
    return s;
}

كما يمكنك أن ترى ذلك بإلحاق محتوى FusionLog الممتلكات التي تمثل إضافية المعلومات في حالة الجمعية الحمل الفشل.

كيف يمكنني الحصول على Elmah لتسجيل إضافية معلومات من حقل مخصص استثناء

ELMAH متجر نتيجة الدعوة ToString على استثناء تفاصيل الخطأ حتى إذا كان لديك ToString نفذت كما هو مقرر ، أو المعلومات دون الحصول على تسجيل مزيد من العمل.القضية الوحيدة هي أن يتم تسجيل التفاصيل غير منظم النص.

باستثناء فئة يحتوي على قاموس (اسمه البيانات ، أعتقد) التي يمكنك استخدامها لربط البيانات المخصصة مع الفانيليا استثناء.

أنا لا أفهم السؤال لكن يبدو أن تسأل ماذا تفعل مع الاستثناء إضافية البيانات ، إذا كان هذا ليس سؤال لا تتردد في تجاهل هذا.

أعتقد أنه سؤال مهم هو ما هو بالضبط رسالة الاستثناء ؟ ليس من أجل معرفة أين الاستثناء جاء من تتبع المكدس هو من أجل ذلك ؛ ليس لتغليف استثناء في عام واحد ، وينبغي أن يتم ذلك مع InnerException الميدان ؛ في حالة الاستثناء هو فقط رفع من مكان معين في التعليمات البرمجية الخاصة بك ليست حتى في وصف ما نوع الخطأ الذي كان - هذا ما نوع الاستثناء ؟

عموما انا استخدم حقل الرسالة لتوفير بسيطة للقراءة البشرية النصائح التي مبرمج ليست لي رؤية هذا الخطأ للمرة الأولى إلى الحصول على فهم النظام الأساسي.أنا أعتبر حقل الرسالة مناسبة لفترة قصيرة (جملة واحدة) تفسير إشارة لكيفية هذا الخطأ كثيرا ما تثار ، أو إشارة إلى مزيد من القراءة.

لذا بقدر ما أفهم سؤالك أعتقد أن أفضل طريقة لتخزين هذه "المعلومات الإضافية" التي تلقى من نظام آخر هو InnerException.أنا لا أعرف Elmah ، ولكن إذا كان يستحق الملح وسوف تحقق InnerExceptions وتخزينها.

أنا لا أفهم السؤال ... أنت توسيع النظام.استثناء, و بالفعل وأضاف Elmah المجال.حيث ينتمي-كما الممتلكات العامة الاستثناء نفسها.

Elmah هو http وحدة السجلات الاستثناءات غير المعالجة.

اعتقد انها مجرد الحد من Elmah ، لأنه لا تخزن الحقول المخصصة.أعتقد أنني يجب أن أسأل هؤلاء الرجال.لدي حقل إضافي هناك استجابة البيانات ، ولكن Elmah لا تخزينه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top