متى تكون آخر لحظة يمكنني إرجاع استثناء لعميل في WCF؟
-
05-09-2019 - |
سؤال
دعنا نقول أن لدي هذا في تنفيذ IinstanceProvider:
public void ReleaseInstance(InstanceContext instanceContext, object instance)
{
try
{
unitOfWork.Commit();
}
catch (Exception)
{
unitOfWork.Rollback();
throw;
}
finally
{
unitOfWork.Dispose();
}
}
الذي - التي يرمي؛ لن يتم إرجاعها أبدا إلى العميل لأنه يتم استدعاءه بعد أن قامت الخدمة بعمل العمل وعاد البيانات إلى العميل، وبالتالي يتم القيام به. كيف يمكن أن أعود الاستثناء؟ أم أن هناك مكان أفضل للقيام بذلك؟
المحلول
أعتقد أنك تبحث في المكان الخطأ للقيام بذلك. أعتقد أن الاختيار الأفضل هو تطبيق واجهة IDISPatchMessageSpectorpection وإرفاقه بالمجموعة المكشوفة بواسطة خاصية MessageInsintbors على Dispathruntime (من خلال سلوك، على الأرجح).
مع هذا، يمكنك فحص الرسائل القادمة والخروج، وتعديلها إذا لزم الأمر (وهذا هو كيفية تحقيق استثناءك، كحليل في رسالة الإرجاع). لهذا السبب، فلن تدع فقط فقاعة الاستثناء، بل ستغيره إلى رسالة خطأ وتعيين رسالة الإرجاع إلى ذلك.
نصائح أخرى
أنا لست على دراية بالمعاملات في WCF كما يجب أن أكون. ماذا في التعليمات البرمجية أعلاه بإرجاع النتائج إلى العميل؟ هل هو التراجع؟