سؤال

لدي فصل يتولى كل التفاعل في طلبي مع خدمة WCF الخاصة بي ويبدو أن MSDN تقول أن استخدام استخدام) _ مع WCF سيء - يمكنني أن أرى لماذا هذا سيئ والموافقة عليه (http:/ /msdn.microsoft.com/en-us/library/aa355056.aspx)

مشكلتي هي أن طريقة التنفيذ المقترحة الخاصة بهم تعني أن لدي 10 طرق [كأسلوب عام في خدمتي] والتي سيكون لها نفس رمز الهيكل وهذا بالطبع لا يتبع المدير الجاف - يبدو الرمز مشابهًا لما يلي :

try
{
    results = _client.MethodCall(input parameteres);
    _client.Close();
}
catch (CommunicationException)
{
    if (_client != null && _client.State != CommunicationState.Closed)
    {
        _client.Abort();
    }
}
catch (TimeoutException)
{
    if (_client != null && _client.State != CommunicationState.Closed)
    {
        _client.Abort();
    }
}
catch (Exception ex)
{
    if (_client != null && _client.State != CommunicationState.Closed)
    {
        _client.Abort();
    }
    throw;
}

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

هل لدى أي شخص أي نصائح حول كيف يمكنني أن أكون أكثر حيوية هنا في إعادة استخدام الكود

شكرًا

بول

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

المحلول

أود أن أستخدم بعض مكونات معالجة الاستثناءات للأغراض العامة القابلة للتكوين والتي تتيح معالجة الاستثناءات الأساسية مثل التسجيل ، وإعادة التهوية وما إلى ذلك. مثال واحد على هذا المكون هو Microsoft's استثناء معالجة كتلة التطبيق.

ثم قد ينتهي بك الأمر برمز مثل هذا:

try
{
    results = _client.MethodCall(input parameteres);
    _client.Close();
}
catch (Exception ex)
{
    _client.CloseIfNeeded();
    if (!ex.Handle("Wcf.Policy")) throw;
}

أين CloseIfNeeded يشير إلى طريقة تمديد مخصصة تغلف منطق إغلاق قناة WCF ، و Handle تستدعي طريقة الاستثناء آلية معالجة الاستثناء ، والتي تمر باسم سياسة الاستثناء التي يجب تطبيقها على هذا المكان.

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

  • التكوين الفوري لسلوك معالجة الاستثناء (السياسات)
  • قابلية التوسيع مع معالجات الاستثناء المخصصة المرتبطة بأنواع محددة من الاستثناءات وسياسات الاستثناء
  • أفضل إمكانية إدارة الكود وسهولة القراءة
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top