لا يتم اكتشاف استثناء FaultException () الذي تم إلقاؤه بواسطة الخدمة بواسطة Client Catch (FaultException )
-
27-09-2019 - |
سؤال
حسنًا ، أعلم أنني أفتقد شيئًا هنا. لدي عقد العملية التالي:
public double DivideByZero(int x, int y)
{
if (y == 0)
{
throw new FaultException<ArgumentException>
(new ArgumentException("Just some dummy exception")
,new FaultReason("some very bogus reason"), new FaultCode("007"));
}
return x / y;
}
والمتابعة مأخوذة من العميل:-
Console.WriteLine("Enter the x value");
string x = Console.ReadLine();
Console.WriteLine("Enter the Y value");
string y = Console.ReadLine();
try
{
double val = client.DivideByZero(Convert.ToInt32(x), Convert.ToInt32(y));
Console.WriteLine("The result is " + val.ToString());
}
catch(FaultException<ArgumentException> exp)
{
Console.WriteLine("An ArgumentException was thrown by the service "+ exp.ToString());
}
catch (Exception exp)
{
Console.WriteLine(exp.ToString());
}
في الحالة المذكورة أعلاه ، لا يتم تنفيذ Catch (expception exp) (لا يتم تنفيذ كتلة الصيد الأولى مع engumentException في رمز العميل). ومع ذلك ، عندما أقوم بإزالة PresumentException للحصول على catch (expception excception) ، يتم تنفيذ كتلة الصيد نفسها. لست متأكدًا من ذلك لأنني أرمي خطأ في عقد التشغيل الخاص بي. هل أفتقد أي شيء هنا.
نقدر مساعدتكم ، آشيش
تحرير:- عندما قمت بتحديث مرجع الخدمة في موكلي ، تمكنت من التقاط FaultException<ArgumentException>
استثناء.
المحلول
جربه مع FaultException<DataContract>
لبعض نوع عقد البيانات التعسفي. إذا نظرت إلى الكود الذي تم إنشاؤه للخطأ في فئة الوكيل ، أراهن أنك سترى أن ArgumentException
ليس تسلسلًا بالطريقة التي تتوقع بها.
نصائح أخرى
إذا كنت تستمد فئة الاستثناء ، فتأكد من أن استثناءك المخصص لديه مُنشئ التسلسل
protected MyCustomException(
SerializationInfo info,
StreamingContext context)
: base(info, context) { }