わかりました、私はここで何かが欠けていることを知っています。以下の運用契約を結んでいます。
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(FaultException exp) (クライアント コード内の ArgumentException を持つ最初の catch ブロック) ブロックは実行されません。ただし、ArgumentException を削除して catch(FaultException exp) を指定すると、同じ catch ブロックが実行されます。操作コントラクトから FaultException をスローしているため、これについてはわかりません。ここに何か欠けていますか?
あなたの助けに感謝します、アシッシュ
編集:-クライアントでサービス参照を更新すると、FaultException<ArgumentException>
例外をキャッチできました。