سؤال

مجموعة تطوير خدمة على أساس (.صافي رأس المال العامل) التطبيق و نحن نحاول أن تقرر كيفية التعامل مع الاستثناءات في الخدمات الداخلية.يجب أن نرمي استثناءات ؟ عودة الاستثناءات تسلسل كما XML ؟ فقط إرجاع رمز خطأ ؟

نضع في اعتبارنا أن المستخدم لن ترى هذه الاستثناءات ، أجزاء أخرى من التطبيق.

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

المحلول

WCF يستخدم SoapFaults كما موطنه الأصلي وسيلة نقل استثناءات سواء من الخدمة للعميل أو العميل إلى الخدمة.

يمكنك إعلان مخصص الصابون خطأ باستخدام FaultContract السمة في العقد الخاص بك واجهة:

على سبيل المثال:

[ServiceContract(Namespace="foobar")]
interface IContract
{
    [OperationContract]
    [FaultContract(typeof(CustomFault))]
    void DoSomething();
}


[DataContract(Namespace="Foobar")]
class CustomFault
{
    [DataMember]
    public string error;

    public CustomFault(string err)
    {
        error = err;
    }
}

class myService : IContract
{
    public void DoSomething()
    {
        throw new FaultException<CustomFault>( new CustomFault("Custom Exception!"));
    }
}

نصائح أخرى

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

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

أنا مشوشة قليلا, أنا لا أكون وقح .. تقول كنت ترغب في العودة الاستثناءات تسلسل كما XML من جهة أن المستخدم لن ترى الاستثناءات من ناحية أخرى.الذين سوف تكون رؤية هذه الاستثناءات ؟

عادة أنا أقول لاستخدام رأس المال العامل خطأ عقود.

فيل أجزاء مختلفة من التطبيق تنادي بعضها البعض باستخدام رأس المال العامل.من خلال "عودة الاستثناءات تسلسل كما XML:" أنا من المفترض أن القيمة المرجعة من الدالة القفر يكون استثناء كائن.النجاح سيكون أشار null.

أنا لا أعتقد أن هذا هو الخيار الصحيح.

WCF خطأ عقود تبدو جيدة, ولكن أنا لا أعرف أي شيء عنهم.التحقق من جوجل الآن.

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

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

ويمكن أن يتم ذلك باستخدام FaultCode.CreateReceiverFaultCode و FaultCode.CreateSenderFaultCode.

أنا في عملية الذهاب من خلال هذا الآن, ولكن واجهت سيئة عقبة يبدو في WCF خطأ ولدت الصابون 1.1 الاستجابة.إذا كنت مهتما يمكنك التحقق من سؤالي عن ذلك هنا:

.صافي رأس المال العامل أخطاء توليد غير صحيحة الصابون 1.1 faultcode القيم

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