在我的 WCF 服务上,我有几个自定义故障类型。一个称为 BaseFault 的抽象类型和它的两个实现称为 TypeOneFault 和 TypeTwoFault
我像这样在服务端抛出异常
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} ...
}
如果有一个这样的块可以捕获我在服务器上抛出的任何异常并通过抽象我得到正确的类的详细信息,那就太好了。通过执行上述操作,我得到一个错误。An unhandled exception of type 'System.ServiceModel.FaultException
1' 发生在 mscorlib.dll 中`
有什么我需要改变才能完成这项工作,还是我只需要满足于多个 catch 块?