سؤال

أنا لست متأكدا من أنني سعيدة تماما أن رمي الاستثناءات في خدمات الويب هو فكرة جيدة.أنا لا تمانع كثيرا إذا لم تكن تتبع المكدس.هذا ليس شيئا كنت wan't.

لدي بحث حول عدة تطبيقات و هناك لا يبدو أن يكون الإجماع على هذا.CampaignMonitor على سبيل المثال بإرجاع نتيجة كائن ، ولكن البعض الآخر لا.

معماريا ، أنا غير متأكد من عودته عودة كائن منطقي بالتأكيد استثناء استثناء ، ولكن ماذا أنا أحب حول عودة الكائن هو أنه أكثر رشيقة الحل بالنسبة للمستخدم النهائي.

هل لدى أحدكم أي أفضل الحلول ؟

تحرير

BTW أنا باستخدام ASMX خدمات الويب ، حيث تحول CustomErrors على ليس خيارا.

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

المحلول

وماذا تتبع المكدس الذي تتحدث عنه؟ هل حاولت هذه؟

في كل من الخدمات ASMX وWCF، سيترجم استثناء uncaught إلى خطأ SOAP. في كلتا الحالتين، يمكن أن يتم تكوين للا تشمل أي تتبع المكدس. في الواقع، هذا هو الافتراضي في صندوق رأس المال العامل.

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

نصائح أخرى

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

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

لذلك ، كما ينطبق على خدمات الويب-في عام رمي الاستثناءات (مما يؤدي SoapFault).يسمح هذا الاحتجاج رمز العميل استخدام المدمج في معالجة الاستثناء معيار التعامل معها.

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

في حالة وجود خطأ الأعمال التجارية، وإرجاع كائن استجابة تحتوي على وصف الخطأ. في حالة وجود خطأ في النظام، ورمي استثناء.

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

وأي جزء من هذا السيناريو وكنت أتساءل عنه؟

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

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

وMyWebServiceMethod الفراغ الجمهور ()   {
    محاولة
    {

 ///Do something that may cause an error
     

و} الصيد (مثلا استثناء)
     {         رمي ApplicationException الجديد ( "سهل الاستخدام   descritption استثناء ")؛

     

و}

     

و}

وأو يجوز لك أيضا

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

والصيد (على سبيل المثال استثناء) {       رمي السابق. }

إذا قمت بإعادة رمي استثناء، سوف إخفاء تتبع المكدس الأصلي من العملاء من خدمات الويب الخاص بك.

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

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