私のWCFサービスには、いくつかのカスタム障害タイプがあります。BaseFaultと呼ばれる抽象型と、TypeOneFaultおよびTypeTwoFaultと呼ばれるその2つの実装
私はこのようにサービス側で例外をスローしています
public string ThisMethodHasFault(string eType)
{
if (eType.Contains("One"))
{
TypeOneFault one = new TypeOneFault("TypeOneFault thrown");
throw new FaultException<TypeOneFault>(one, new FaultReason(new FaultReasonText("Fault reason here")));
}
else
{
TypeTwoFault two = new TypeTwoFault("TypeTwoFault thrown");
throw new FaultException<TypeTwoFault>(two, new FaultReason(new FaultReasonText("Fault reason here")));
}
return "";
}
私のサービスインターフェースはこんな感じです
[OperationContract]
[FaultContract(typeof(TypeOneFault ))]
[FaultContract(typeof(TypeTwoFault ))]
string ThisMethodHasFault(string eType);
クライアント側では、このようにキャッチするテストWinFormアプリケーションがあります
MyServiceClient client = new MyServiceClient();
try
{
client.ThisMethodHasFault(""); //get value from user
}
catch (FaultException<TypeOneFault> ox)
{
TypeOneFault oneEx = ox.Detail;
oneEx.{property} ...
}
catch (FaultException<TypeTwoFault> tx)
{
TypeTwoFault twoEx = tx.Detail;
twoEx.{property} ...
}
質問:
代わりにこれを行うことでキャッチブロックの数を減らすことができないようです
catch (FaultException<BaseFault> fex)
{
BaseFault Ex = fex.Detail;
twoEx.{property} ...
}
サーバーにスローする例外をキャプチャできるブロックが1つあれば、抽象化によって適切なクラスの詳細を取得できればよかったと思います。上記を実行すると、エラーが発生します。An unhandled exception of type 'System.ServiceModel.FaultException
mscorlib.dll`で1'が発生しました
これを機能させるために変更する必要があるものはありますか、それとも複数のキャッチブロックのみに満足する必要がありますか?