تعطيل ADBLOCK

يمنع ADBlock بعض المحتوى على الموقع

ADBlock errore

إضافة معلومات إضافية لاستثناء مخصصة

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

سؤال

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

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

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

المحلول

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

http://msdn.microsoft.com/en- لنا / مكتبة / system.exception.message.aspx

<اقتباس فقرة>   

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

     

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

     

[..]

     

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

     

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

     

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

والبيانات الاستجابة لا تنطبق عليه صفة الوصف.

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

نصائح أخرى

<اقتباس فقرة>   

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

لا، كما سورين أشرنا . ومع ذلك، يمكن أن نوع الاستثناء الخاص تجاوز ToString وبطريقة معقولة إضافة المعلومات والبيانات استجابة هناك. وهذه ممارسة طبيعية تماما تليها العديد من أنواع الاستثناء في BCL (مكتبة الفئات قاعدة) حتى أنك لن تجد نفسك تسبح ضد التيار. على سبيل المثال، لديها نظرة على System.IO.FileNotFoundException.ToString التنفيذ في <أ href ل = "http://research.microsoft.com/sscli/" يختلط = "نوفولو noreferrer"> 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;
}

وكما ترون، فإنه يلحق محتوى <لأ href = "http://msdn.microsoft.com/en-us/library/system.io.filenotfoundexception.fusionlog.aspx" يختلط = "نوفولو noreferrer" > FusionLog الملكية، والتي تمثل <م> معلومات إضافية في حالة فشل تحميل التجميع.

<اقتباس فقرة>   

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

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

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

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

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

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

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

وأنا لا أفهم السؤال - كنت توسيع System.Exception، والتي سبق وأن أضفت هذا المجال Elmah. هذا حيث ينتمي - كخاصية العامة للاستثناء نفسها

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

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

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow